使用ant编译嵌套jar

时间:2011-11-29 16:57:50

标签: java ant jar classpath

我有一个Java项目Parent,它取决于Child子项目(以JAR的形式)。此Child取决于库AB,并且与Child捆绑在一起。 Parent也使用AB(意思是直接调用,而不是通过Child间接调用。我希望能够包含A和{{1}在我的项目中只有一次JAR。

当我编译B时,我会在引用库Parentcannot find symbol时获得A。我相信这是因为B在编译时路径上,但由于某种原因,其中的库不是。

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

Parent

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

2 个答案:

答案 0 :(得分:1)

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

在这种情况下,解决此问题的一种方法是为第三方库创建项目或目录,然后由多个项目使用。在您描述的环境中,您的Child项目会将它们捆绑到自己的构建输出中,Parent项目将直接在其类路径中使用它们。

让我们说你在文件系统中创建与你的其他项目相同级别的thirdparty项目:

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

答案 1 :(得分:0)

我的问题源于Java无法原生引用jar中的jar。您需要使用http://one-jar.sourceforge.net/之类的东西来解决它。