从命令行运行 Jar:ClassNotFoundException



我正在使用ANT创建应用程序的JAR文件。当我阅读时,我应该将我需要的外部 Jar 作为命令行中的参数,但我想构建一个清单文件。

这是我的构建.xml文件(仅我构建jar的部分(

<!-- Build jar from classes -->
    <target name="jar" depends="compile" description="Build a jar file.">
         <manifestclasspath property="jar.classpath" jarfile="${target.build.main}/main">
             <classpath>
                 <fileset dir="${target.build.main}/lib" includes="*.jar"/>
             </classpath>
         </manifestclasspath>
<jar destfile="${target.dist}/configuration-deployer.jar" basedir="${target.build.main}">
        <manifest>
            <attribute name="Main-Class" value="${dist.main.class}" />
            <attribute name="Class-Path" value="${jar.classpath}" />
        </manifest>
    </jar>
</target>

现在这是清单文件的摘录

Manifest-Version: 1.0
Ant-Version: Apache Ant 1.8.4
Created-By: 1.6.0_45-b06 (Sun Microsystems Inc.)
Main-Class: com.sap.coas.deployer.StoreInstanceOnMove
Class-Path: lib/ConfigurationMetamodel-1.jar lib/Consumer_api-1.jar li
b/FunctionalSystemMetaModel-1.jar lib/WS_api-1.jar lib/activemq-core-
5.7.0.jar lib/activemq-protobuf-1.1.jar ..... other jar

如果我打开生成的 JAR,我可以看到 META-INF 文件夹中的清单,并且 lib 文件夹包含所有库。所以JAR的结构是这样的:

/META-INF/manifest.mf
/lib/ConfigurationMetamodel-1.jar
/lib/otherJar.jar ........

但是当我试图跑步时

java -jar myJar.jar

我得到了 ClassNotFoundException,我确信包含引发异常的类的 jar 在 lib 文件夹中。

谢谢!

不能在清单文件中使用类路径标头指向 JAR 文件中的 JAR。请检查以下链接。您应该将 lib 文件夹与这些 JAR 一起放在 myJar.jar 的同一文件夹中。

将类添加到 JAR 文件的类路径

注意:类路径标头指向本地网络上的类或 JAR 文件,而不是 JAR 文件中的 JAR 文件或通过因特网协议访问的类。要将 JAR 文件中的类加载到类路径中,必须编写自定义代码来加载这些类。例如,如果 MyJar.jar 包含另一个名为 MyUtils.jar 的 JAR 文件,则不能使用 MyJar.jar 清单中的 Class-Path 标头将 MyUtils 中的类加载到类路径中.jar。

相关内容

  • 没有找到相关文章

最新更新