Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/373.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/ant/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 为什么ant认为包不';不存在?_Java_Ant_Classpath_Javac - Fatal编程技术网

Java 为什么ant认为包不';不存在?

Java 为什么ant认为包不';不存在?,java,ant,classpath,javac,Java,Ant,Classpath,Javac,我有以下目录结构: MyApp/ src/main/java/ com/ myapp/ api/ IFizz FizzLoader impl/ core/ FizzImpl Cat

我有以下目录结构:

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
Dog
等就不会被编译(因此被排除在外)

在by 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
时,我得到以下生成异常:

[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.path
com.myapp.impl.core.FizzImpl
?提前谢谢

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>

<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>