Java 从父目录编译时,如何在清单文件中指定主类?

Java 从父目录编译时,如何在清单文件中指定主类?,java,jar,manifest,javac,Java,Jar,Manifest,Javac,我的目录结构如下: > 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

我的目录结构如下:

> 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类:src.Main
,但也不起作用。这可能非常简单,但我发现谷歌没有提供任何简单的解决方案。

请从Oracle找到答案

请查找示例代码:-

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`
谢谢
Pavan

请从Oracle找到答案

请查找示例代码:-

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`
谢谢
Pavan

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

谢谢,
Pavan

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

谢谢,
Pavan

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