gpt4 book ai didi

java.lang.NoClassDefFoundError,Ant任务无法在jar内看到jar中的类

转载 作者:行者123 更新时间:2023-11-30 03:57:30 26 4
gpt4 key购买 nike

我编写了 Java 工具(在本例中为 iOffloadMaker),它还包含自己定义的 Ant 任务作为主要启动器,以使用 Ant 启动该工具。我将所有外部 jar 库捆绑到交付的工具的 jar 中。我还提供了一个简单的 Ant build.xml 文件来启动我的工具:

<?xml version="1.0"?>
<project name="TestBound" default="main" basedir=".">
<!-- Sets varables which can later be used. -->
<property name="src.dir" value="src" />
<property name="build.dir" value="bin" />
<property name="dist.dir" value="dist" />
<property name="libs.dir" value ="libs" />


<path id="build.classpath">
<fileset dir="${libs.dir}">
<include name="**/*.jar"/>
</fileset>

<pathelement location=".\iOffloadMaker.jar"/>
</path>
<!-- define offload maker task -->

<taskdef name="iOffloadMaker" classname="com.richardle.ioffload.OffloadMakerTask" classpathref= "build.classpath"/>

...

<!-- Creates the build, docs and dist directory-->
<target name="modify" description="modify the source code" >
<iOffloadMaker projectFolder="${basedir}">
</iOffloadMaker>

</target>

...

<target name="main" depends="compile">
<description>Main target</description>
</target>
</project>

问题是,Ant Task 无法引用我的工具 jar 文件内的 jar 库中的类。因此,当我运行 ant 时,它会抛出异常:

D:\SOFTWARE\Android\TestBound>ant modify
Buildfile: D:\SOFTWARE\Android\TestBound\build.xml

modify:
[iOffloadMaker] Offload Maker is executing...

BUILD FAILED
D:\SOFTWARE\Android\TestBound\build.xml:40: java.lang.NoClassDefFoundError: org/
xmlpull/v1/XmlPullParserException
at com.richardle.ioffload.offloadmaker.ApplicationProject.<init>(Applica
tionProject.java:30)
at com.richardle.ioffload.offloadmaker.OffloadMaker.execute(OffloadMaker
.java:121)
at com.richardle.ioffload.OffloadMakerTask.execute(OffloadMakerTask.java
:26)
at org.apache.tools.ant.UnknownElement.execute(UnknownElement.java:292)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.
java:57)

我确信所有必要的库都捆绑到 iOffloadMaker.jar 中。问题是 Ant 任务加载器无法在我的 jar 文件中看到依赖项 jar 的类。

如果我没有将所有依赖项捆绑到 jar 中,而是将它们与 iOFloadMaker.jar 一起交付到依赖项文件夹中,则它会按我的预期工作。但我想将所有依赖项和我的工具源代码捆绑到一个交付 jar 文件中。

这个问题有解决办法吗?

最佳答案

标准 Java 类加载器无法处理递归 JAR(即捆绑在其他 JAR 内的 JAR)。

此页面列出了几个解决方案:http://www.jdotsoft.com/JarClassLoader.php

请告诉我哪一个适合您。

关于java.lang.NoClassDefFoundError,Ant任务无法在jar内看到jar中的类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22805416/

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