Java 未将Log4j添加到Ant中的类路径
我试图在Ant中将Log4j添加到我的项目的类路径中,该类路径创建了一个可执行的JAR,但它似乎没有被正确添加 下面是我的Ant构建脚本的Java 未将Log4j添加到Ant中的类路径,java,ant,jar,log4j,Java,Ant,Jar,Log4j,我试图在Ant中将Log4j添加到我的项目的类路径中,该类路径创建了一个可执行的JAR,但它似乎没有被正确添加 下面是我的Ant构建脚本的路径组件: <path id="classpath.compile"> <fileset dir="${dir.myLibs}"> <include name="**/*.jar"/> </fileset> <pathelement location="${dir.webContent}
路径
组件:
<path id="classpath.compile">
<fileset dir="${dir.myLibs}">
<include name="**/*.jar"/>
</fileset>
<pathelement location="${dir.webContent}/WEB-INF/lib/log4j.jar" />
</path>
JAR已经创建,但当我执行它时,我得到:
线程“main”java.lang.NoClassDefFoundError中的异常:org/apache/log4j/Logger…
关于我做错了什么,你有什么想法吗?我猜你运行的Java程序如下
java -jar myapp.jar
在这种情况下,需要在清单中指定类路径属性。我建议您也检查一下manifestclasspath任务创建jar时不包括jar中的链接库。为了以这种方式运行,您必须在执行类路径中包含所需的JAR。或者,您可以使用我使用的解决方案,即创建归档。它为您的应用程序添加了一个专门的类加载器,并将您所需的jar打包到最终的可执行jar中。它非常适合部署整洁、易于使用的包。从清单中的类路径可以看出,您正在尝试引用jar中的jar。只有两种方法可以使它在aik中工作:1)一个特殊的类加载器,如@infosec812提到的;2)将jar依赖项直接分解到jar的根中。这两种方法都是可行的,但我看不到它们在您的ant脚本中发生
如果您试图引用jar之外的jar,那么您的相对类路径是相对于您正在执行的jar的位置的。确保引用的jar存在于该位置。是MANIFEST.MF或运行时命令行的classpath声明中的log4j路径吗?@highlycaffinated:我已经在上面添加了MANIFEST.MF。
<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-Version: 1.0
Class-Path: ../../../WebContent/WEB-INF/lib/log4j.jar (what is this pathing relative to?)
Main-Class: foo.Bar
java -jar myapp.jar