Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/360.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编译嵌套JAR_Java_Ant_Jar_Classpath - Fatal编程技术网

Java 使用ant编译嵌套JAR

Java 使用ant编译嵌套JAR,java,ant,jar,classpath,Java,Ant,Jar,Classpath,我有一个Java项目,Parent,它依赖于一个子项目(以JAR的形式)。这个Child依赖于库A和B,这些库与Child捆绑在一起Parent也使用A和B(意思是直接调用,而不是通过Child间接调用)。我希望能够在我的项目中只包含一次A和BJAR 当我编译Parent时,当它引用库a和B时,我得到了一个找不到符号的。我相信这是因为Child在编译时路径上,但出于某种原因,其中的库不在 我正在使用ant作为我的构建工具-我应该在嵌套JAR的javac标记中做什么特别的事情吗?现在在Parent

我有一个Java项目,
Parent
,它依赖于一个子项目(以JAR的形式)。这个
Child
依赖于库
A
B
,这些库与
Child
捆绑在一起
Parent
也使用
A
B
(意思是直接调用,而不是通过
Child
间接调用)。我希望能够在我的项目中只包含一次
A
B
JAR

当我编译
Parent
时,当它引用库
a
B
时,我得到了一个
找不到符号的
。我相信这是因为
Child
在编译时路径上,但出于某种原因,其中的库不在

我正在使用ant作为我的构建工具-我应该在嵌套JAR的javac标记中做什么特别的事情吗?现在在
Parent
的build.xml中,我有:

<target name="compile" depends="clean, makedir">
    <javac 
        srcdir="${src.dir}"
        destdir="${build.dir}"
        includeantruntime="false"
        classpathref="build.classpath">
    </javac>
</target>

<path id="build.classpath">
    <fileset dir="${lib.dir}">
        <include name="**/*.jar" />
    </fileset>
</path>


这应该包括我的lib文件夹中的所有jar,但它似乎不包括jar中的所有jar。

我假设
A.jar
B.jar
是第三方库,而不是您自己构建的输出

在这种情况下,解决此问题的一种方法是为第三方库创建一个项目或目录,该项目或目录可供多个项目使用。在您描述的环境中,您的
子项目将把它们捆绑到自己的生成输出中,
父项目将直接在其类路径上使用它们

假设您在文件系统中创建的
第三方
项目与其他项目处于同一级别:

  thirdparty
    lib
      A.jar
      B.jar
  Parent
    build.xml
    src
  Child
    build.xml
    src
在生成文件中,可以定义第三方项目的位置:

<property name="thirdparty" value="../thirdparty"/>

并在路径中引用它:

<include name="${thirdparty}/lib/A.jar"/>
<include name="${thirdparty}/lib/B.jar"/>

我的问题源于Java无法在JAR中本地引用JAR的事实。您需要使用类似的方法来绕过它