【问题标题】:Need Help in the Creation of Jar File through Java Command?在通过 Java 命令创建 Jar 文件时需要帮助?
【发布时间】:2011-08-09 10:23:49
【问题描述】:

我需要创建我的 java 应用程序的 jar 文件。首先,我创建了一个名为 Manifest.MF 的文件,在该文件中我存储了以下代码

Manifest-Version: 1.0
Main-Class: com.demo.test.JavaTest

然后我在命令提示符下执行了以下命令

jar cvfm JavaAppDemo.jar MANIFEST.MF "C:\JavaSamples\MyApp"

MyApp 是我的项目目录,在那里我创建了包并使用了其他 jar 文件

然后我尝试使用 java 命令运行 jar

java -jar JavaAppDemo.jar

我得到了以下异常

线程“main”中的异常 java.lang.NoClassDefFoundError: com/demo/test/JavaTest

原因: java.lang.ClassNotFoundException: com.demo.test.JavaSamp 在 java.net.URLClassLoader$1.run(URLClassLoader.java:202) 在 java.security.AccessController.doPrivileged(本机 方法) 在 java.net.URLClassLoader.findClass(URLClassLoader.java:190) 在 java.lang.ClassLoader.loadClass(ClassLoader.java:307) 在 sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301) 在 java.lang.ClassLoader.loadClass(ClassLoader.java:248) 无法找到主类: com.demo.test.JavaTest。程序将 退出。

请告诉我,我想创建一个 jar,我必须将我的项目目录中的文件捆绑到该 jar 文件中,当我提取 jar 时,我得到了我的项目文件夹,但是当我运行我的 jar 时,我得到了上面异常,所以我很困惑哪里存在漏洞。

【问题讨论】:

  • 你试过java -cp . -jar JavaAppDemo.jar吗?
  • @Helper 方法:不,我没有尝试过你的命令
  • @Helper 方法:-cp 在使用-jar 时被忽略
  • @Helper 方法:我得到了同样的错误
  • @a_horse_with_no_name:你说得对

标签: java jar


【解决方案1】:

您可能应该使用此语法来构建您的 jar:

jar cvfm myapp.jar myapp.MF -C classes myclasspath

【讨论】:

  • -c classess myclasspath 的意思是,请详细说明,我很困惑我想将我当前目录中的 jar 文件和一些文件捆绑到我的 jar 中,什么是 classes myclasspath
  • @Selvi:“我想将当前目录中的 jar 文件和一些文件捆绑到我的 jar 中”Java 不适用于其他 Jars 中的 Jars。它们都必须添加到应用程序的运行时类路径中。这也可以通过在包含 main(String[]) 的 Jar 清单中列出其他 Jar 来实现。
【解决方案2】:

好吧,有几件事:

您应该如何运行您的应用程序:

java -classpath myapplication.jar:.. -Dlog4j.info -Dlog4j.configuration=file:../../conf/log4j.xml com.mywebsite.Benchmarks

如果你不需要的话,把那些 log4j 东西拿出来。我确定您只是缺少“com.mywebsite.Benchmarks”行,它告诉 jar 从哪个编译类开始。如果你的 jar 中编译了 Benchmarks、FullTest、MainApp 并且 main 方法在 Benchmarks 中,你需要告诉 jar。

至于构建你的 jar...

使用某种 ant 构建脚本是最简单的。

<target name="build">
  <delete file="MyApplication.jar" />
  <delete dir="_classes" />
  <mkdir dir="_classes" />
  <javac srcdir="src" destdir="_classes" debug="true">
    <classpath path="../../3rdParty/log4j/log4j-1.2.16.jar" />
  </javac>
  <jar jarfile="MyApplication.jar" basedir="_classes"/>
</target>

这应该让你开始。但是你在运行它时需要确保一些事情:

  1. 你的类路径上有所有依赖项。

  2. 你告诉 jar 从哪个类开始。

【讨论】:

    【解决方案3】:

    我能想到的一些事情:

    错误消息说它找不到文件 com/demo/test/JavaTest.class。您可以尝试使用 zip 文件程序(.jar 文件像 .zip 文件一样被压缩)查看您的 jar 文件,以查看该文件是否真的不在其中。我怀疑错误代码实际上是正确的,因为它实际上并不存在,但至少您可以亲眼看到(或看不到)。请记住,它必须以“com”文件夹开头。

    也许您混淆了 .class 文件和 .java 文件。您确定您的 .java 文件实际上已编译为 .class 文件吗?这可能不太可能,但也可以这么说。

    也许您需要在最后运行带有"C:\JavaSamples\MyApp\*" 的jar 命令,以挑选出正确目录中的所有文件。也许您告诉 jar 命令包含文件夹“MyApp”。您实际上并不想要该文件夹;你想要里面的所有文件。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-09-18
      相关资源
      最近更新 更多