【问题标题】:Why does ant think package doesn't exist?为什么蚂蚁认为包不存在?
【发布时间】:2013-07-19 13:14:14
【问题描述】:

我的目录结构如下:

MyApp/
    src/main/java/
        com/
            myapp/
                api/
                    IFizz
                    FizzLoader
                impl/
                    core/
                        FizzImpl
                    Cat
                    Dog
                    Tree
                    ...many other objects
    src/test/java
        ...
    build/
    lib/
    ...

我只想编译src/main/java/com/myapp/api 以及 com.myapp.impl.core.FizzImpl 下的所有内容,这样CatDogTree 等就不会被编译(因此排除)。

在通过 Ant build (build.xml) 中,我配置了以下main.compile.path

<path id="src.path">
    <fileset dir="src/main/java/com/myapp/api">
        <include name="**.*java"/>
    </fileset>
</path>
<path id="lib.main.path">
    <fileset dir="lib/main">
        <include name="**/*.jar"/>
    </fileset>
</path>
<path id="main.compile.path">
    <path refid="src.path" />
    <path refid="lib.main.path" />
    <fileset dir="src/main/java" includes="com/myapp/impl/core/**/*" />
</path>

然后是下面的main-compile目标:

<target name="main-compile">
    <javac includeantruntime="false" srcdir="src/main/java/com/myapp/api"
            destdir="gen/bin/main" debug="on">
        <classpath refid="main.compile.path"/>
    </javac>
</target>

当我运行 main-compile 时,我得到以下构建异常:

[javac] /home/myuser/eclipse/workspace/MyApp/src/main/java/com/myapp/api/FizzLoader.java:14: package com.myapp.impl.core does not exist
[javac] import com.myapp.impl.core.FizzImpl;
[javac]  ...(omitting rest of trace but available upon request)

这里,FizzLoader 正在创建FizzImpl 的一个实例,所以我需要在编译路径上使用它。

为什么Ant 看不到我选择性添加到main.compile.pathcom.myapp.impl.core.FizzImpl?提前致谢!

【问题讨论】:

    标签: java ant classpath javac


    【解决方案1】:

    javac 的类路径应该引用包含已编译类文件树根的目录和 jar 文件。它不应该引用 Java 文件。

    同样,源目录应该是指源文件的包树的根目录。不在包树内的包对应的目录。

    你的编译任务应该是这样的

    <target name="main-compile">
        <javac includeantruntime="false" 
               srcdir="src/main/java"
               destdir="${gen.bin.main.dir}" 
               debug="on"
               includes="com/myapp/api/**/*.java, com/myapp/impl/core/FizzImpl/**/*.java">
            <classpath refid="lib.main.path"/>
        </javac>
    </target>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-12-29
      • 2015-03-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-09-29
      • 1970-01-01
      相关资源
      最近更新 更多