1

我创建了一个 jar,其中包含 .class 文件和使用以下 jar 代码执行类文件所需的依赖库

<target name="jar" depends="clean">
    <jar destfile="${basedir}/lib/HelloWorld.jar">
        <zipgroupfileset dir="${basedir}/lib" includes="*.jar" />
        <fileset dir="${basedir}" includes="/com/temp/**" />
        <fileset dir="${basedir}" includes="build.properties"/>
        <manifest>
        <attribute name="Class-Path" value="./HelloWorld.jar"/>
        </manifest>
    </jar>
</target>

现在我已经编写了其他 build.xml 来使用这个 jar 运行 taskdef 操作,但是当我尝试使用 taskdef 操作调用类文件时会发生以下错误,即使类文件及其依赖项存在于同一个 jar 中。

构建失败 C:\Users\kh2139\Desktop\New folder\build.xml:4: taskdef class com.temp.install.common.action.UserInstallDirRule 无法使用类加载器 AntClassLoader[C:\Users\kh2139\Desktop\新建文件夹\HelloWorld.jar]

在下面附加我的 build.xml 代码,该代码用于在 HelloWorld.jar 上运行 taskdef 操作

<?xml version="1.0" encoding="ISO-8859-1"?>
    <project name="MyTask" basedir="." default="use">
<target name="use" description="Use the Task" >
    <taskdef name="helloworld1" classname="com.temp.install.common.action.UserInstallDirRule" classpath="HelloWorld.jar"/>
    <helloworld1/>
    <taskdef name="helloworld" classname="com.temp.install.common.action.EncryptionGUID" classpath="HelloWorld.jar"/>
    <helloworld/>
</target>
</project>

PS:当我在放置 HelloWorld.jar 的位置指定 lib 文件夹并在 taskdef 操作中将类路径提供给 lib 文件夹时,我可以成功运行 build.xml 文件而不会出错。

但我的问题是我想使用同一个 jar 来包含执行类时使用的依赖项。

4

1 回答 1

1

该错误表明 Java 无法UserInstallDirRule.classHelloWorld.jar. 要确定是否HelloWorld.jar包含该类,请尝试运行jar.exeJDK 附带的程序。

jar.exe这是在 Windows 命令提示符中运行的示例:

C:\>jar.exe tf "C:\Users\kh2139\Desktop\New folder\HelloWorld.jar"

输出将显示是否UserInstallDirRule.class在 JAR 文件中。

于 2017-06-06T13:31:07.040 回答