Java 使用ant编译嵌套JAR
我有一个Java项目,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
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的事实。您需要使用类似的方法来绕过它