0

我有以下目录结构:

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下的所有内容,这样Cat,DogTree不会被编译(因此被排除在外)。

在通过 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 看不到com.myapp.impl.core.FizzImpl我有选择地添加到的main.compile.path?提前致谢!

4

1 回答 1

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>
于 2013-07-19T13:23:49.967 回答