【问题标题】:How do you specify a main class in a manifest file when compiling from the parent directory?从父目录编译时,如何在清单文件中指定主类?
【发布时间】:2012-11-23 05:26:38
【问题描述】:

我的目录结构是这样的:

> makefile
> app.jar
> src
    > Main.java
    > Main.class
    > some other classes
    > manifest.txt

我使用以下命令从 makefile 编译:

javac src/*.java
jar cvfm app.jar src/manifest.txt src/*.class

manifest.txt 包含以下内容:

Main-Class: Main

当我从顶层目录运行 java -jar app.jar 时,我收到此错误:

$ java -jar app.jar 
Exception in thread "main" java.lang.NoClassDefFoundError: Main
Caused by: java.lang.ClassNotFoundException: Main
    at java.net.URLClassLoader$1.run(URLClassLoader.java:217)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(URLClassLoader.java:205)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:321)
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:294)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:266)
Could not find the main class: Main. Program will exit.

我尝试将清单更改为Main-Class: src.Main,但这也不起作用。这可能很简单,但我发现 Google 没有提供任何简单的解决方案。

【问题讨论】:

  • 您检查生成的jar 内部包含Main 类吗?
  • 我认为 jar 应该被调用为jar cvfm app.jar src/manifest.txt -C src *.class

标签: java jar manifest javac


【解决方案1】:

请从Oracle那里找到答案

http://docs.oracle.com/javase/tutorial/deployment/jar/build.html

请找到示例代码:-

package oata
public class HelloWorld {
 public static void main(String[] args) {
    System.out.println("Hello World");
 }
 }

创建一个文件夹来放置 .class 文件 然后编译并运行该文件。

 `md build\classes
   javac -sourcepath src -d build\classes src\oata\HelloWorld.java
  java -cp build\classes oata.HelloWorld`


  `echo Main-Class: oata.HelloWorld>myManifest
     md build\jar
    jar cfm build\jar\HelloWorld.jar myManifest -C build\classes .
    java -jar build\jar\HelloWorld.jar`

谢谢 帕万

【讨论】:

    【解决方案2】:

    您遇到 NoClassDefFoundError 异常,可能是类路径设置不正确。

    谢谢, 帕万

    【讨论】:

      猜你喜欢
      • 2023-03-18
      • 1970-01-01
      • 2012-01-08
      • 2013-01-29
      • 2019-11-27
      • 2016-10-06
      • 2020-12-02
      • 2011-01-06
      • 2020-09-23
      相关资源
      最近更新 更多