java - 使用 ant 编译嵌套 jar

标签 java ant jar classpath

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

当我编译Parent时,当它引用库AB时,我得到一个找不到符号 。我相信这是因为 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.jarB.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/

相关文章:

java - 使用媒体录音机在 Android 中录制音频

java - SSLHandshakeException 没有共同的密码套件 - linux 仅使用 wiremock

java - Spring+JPA 集成的实际工作原理

ant - xmlproperty 并在存在/设置特定属性时检索 xml 元素的属性值

适用于 Mac 的 Java 应用程序包不处理参数

shell - sass --watch 进程正在锁定我的终端窗口

java - Junit 测试调用rest api的方法

java - 哪个 Weblogic 10.3 JAR 包含 weblogic.rmi.RemoteException

java - 缺少 : 的应用程序名称 list 属性

java - 如何将 python 模块添加到 jython/lib 中?