【问题标题】:Log4j not being added to classpath in AntLog4j 未添加到 Ant 中的类路径中
【发布时间】:2011-10-10 15:08:04
【问题描述】:

我正在尝试将 Log4j 添加到我在 Ant 中的项目的类路径中,这会创建一个可执行的 JAR,但它似乎没有被正确添加。

这是我的 Ant 构建脚本的 path 组件:

<path id="classpath.compile">
  <fileset dir="${dir.myLibs}">
    <include name="**/*.jar"/>
  </fileset>
  <pathelement location="${dir.webContent}/WEB-INF/lib/log4j.jar" />
</path>

编译目标如下:

<target name="-compile">
  <javac destdir="${dir.binaries}" source="1.6" target="1.6" debug="true" includeantruntime="false">
    <src path="${dir.source}"/>
    <classpath refid="classpath.compile"/>
  </javac>
</target>

创建 JAR 的目标:

<target name="-createJar" >
  <jar jarfile="${path.jarFile}"
     manifest="${dir.source}\META-INF\MANIFEST.MF">
    <fileset dir="${dir.binaries}" casesensitive="yes">
      <exclude name="**/*.java"/>
    </fileset>
  </jar>
</target>

最后,MANIFEST.MF:

Manifest-Version: 1.0
Class-Path: ../../../WebContent/WEB-INF/lib/log4j.jar (what is this pathing relative to?)
Main-Class: foo.Bar

创建了 JAR,但是当我执行它时,我得到:

Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/log4j/Logger...

关于我做错了什么有什么想法吗?

【问题讨论】:

  • 是 MANIFEST.MF 中的类路径声明还是运行时命令行中的 log4j 路径?
  • @highlycaffeinated:我已经在上面添加了我的 MANIFEST.MF。

标签: java ant jar log4j


【解决方案1】:

从 MANIFEST 中的类路径可以看出,您正在尝试引用 jar 中的 jar。使这项工作 AFAIK 的唯一两种方法是 1) 一个特殊的类加载器,如 @infosec812 提到的,或 2) 通过将 jar 依赖项直接分解到 jar 的根目录中。两者都可行,但我没有看到它们中的任何一个发生在您的 ant 脚本中。

如果您尝试引用 jar 之外的 jar,则您的相对类路径是相对于您正在执行的 jar 的位置。确保引用的 jar 存在于该位置。

【讨论】:

    【解决方案2】:

    我猜你正在运行Java程序如下

    java -jar myapp.jar
    

    在这种情况下,您需要在清单中指定 Class-Path 属性。我建议你也检查一下 ma​​nifestclasspath 任务

    【讨论】:

      【解决方案3】:

      创建 jar 不包括 jar 中的链接库。您必须在执行类路径中包含所需的 jar 才能以这种方式运行它。或者,您可以使用我使用的解决方案,即创建一个one-jar 存档。它为您的应用程序添加了一个专门的类加载器到生成的 jar 中,并将您需要的 jar 打包到最终的可执行 jar 中。它非常适合部署整洁、易于使用的软件包。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-12-07
        • 2011-04-08
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多