gpt4 book ai didi

java - Log4j 未添加到 Ant 中的类路径

转载 作者:塔克拉玛干 更新时间:2023-11-02 19:01:02 24 4
gpt4 key购买 nike

我正在尝试将 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 已创建,但当我执行它时,我得到:

线程“main”中的异常 java.lang.NoClassDefFoundError: org/apache/log4j/Logger...

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

最佳答案

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

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

关于java - Log4j 未添加到 Ant 中的类路径,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6783309/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com