我有一个 Java 项目,Parent
,它依赖于 Child
子项目(以 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
是第三方库,而不是您自己构建的输出。
在这种情况下,解决此问题的一种方法是为第三方库创建一个项目或目录,然后供多个项目使用。在您所描述的环境中,您的Child
项目会将它们捆绑到自己的构建输出中,而Parent
项目将直接在其类路径上使用它们。
假设您在文件系统中与其他项目处于同一级别创建了第三方
项目:
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 - 使用 ant 编译嵌套 jar,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8314633/