2015-11-24 116 views
0

使用ant编译(ant compile)项目,其中需要将多个src文件夹分别构建到各自的classes文件夹中。例如:运行ant编译时,“包*不存在”

. 
|-- classes1/com 
| `-- A.class 
|-- classes2/com 
| `-- B.class 
|-- src1/com 
| `-- A.java 
`-- src2/com 
    `-- B.java 

,我快到的问题是,B.java使用在A.java定义的类,并编译B.java时,它抛出package com.A does not exist

这里是我的蚂蚁片段是什么样子:

<path id="classpath"> 
    <fileset dir="lib"> 
     <include name="*.jar" /> 
    </fileset> 
    <fileset dir="."> 
     <include name="**/*.classes" /> 
    </fileset> 
</path> 

<target name="compile"> 
    <javac srcdir="src1" destdir="classes1" includeantruntime="false"> 
     <classpath refid="classpath" /> 
    </javac> 
    <javac srcdir="src2" destdir="classes2" includeantruntime="false"> 
     <classpath refid="classpath" /> 
    </javac> 
</target> 

当我运行ant -v compile我甚至可以看到classes1/COM /的A.class在classpath

回答

0

问题可能是路正在建立路径classpath。我想这个目录“。”是包含classes1classes2的文件夹。在这种情况下,“com.A”类确实是“classes1.com.A”。 文件集应该有两个不同的路径(一个用于每个文件夹),如:

<path id="classpath"> 
    <fileset dir="lib"> 
     <include name="*.jar" /> 
    </fileset> 
    <fileset dir="classes1"> 
     <include name="**/*.class" /> 
    </fileset> 
    <fileset dir="classes2"> 
     <include name="**/*.class" /> 
    </fileset> 
</path> 

这种方式,基部文件夹将是“classes1”和“classes2”,而不是亲本。

+0

还是同样的事情 –

1

首先,每个编译都有一个稍微不同的类路径,因此为了清晰起见,请将它们分开。其次,jar分别在类路径中列出,而类则通过其基目录引用。

尝试以下操作:

<path id="compileA"> 
    <fileset dir="lib"> 
     <include name="*.jar" /> 
    </fileset> 
</path> 

<path id="compileB"> 
    <fileset dir="lib"> 
     <include name="*.jar" /> 
    </fileset> 
    <pathelement location="classes1"/> 
</path> 

<target name="compile"> 
    <javac srcdir="src1" destdir="classes1" includeantruntime="false" classpathref="compileA"/> 
    <javac srcdir="src2" destdir="classes2" includeantruntime="false" classpathref="compileB"/> 
</target> 
+0

哦,是的。我忘了那个。 @Kyle Schustak,你可能想看看http://docs.oracle.com/javase/7/docs/technotes/tools/windows/classpath.html。 – Berne