ChatGPT解决这个技术问题 Extra ChatGPT

无法执行 jar- 文件:“没有主要清单属性”

我已经安装了一个应用程序,当我尝试运行它(它是一个可执行的 jar)时没有任何反应。当我从命令行运行它时:

java -jar“app.jar”

我收到以下消息:

没有主要清单属性,在“app.jar”中

通常,如果我自己创建了程序,我会在清单文件中添加一个主类属性。但在这种情况下,由于文件来自应用程序,我不能这样做。我还尝试提取 jar 以查看是否可以找到主类,但是有很多类并且它们的名称中都没有“main”一词。必须有办法解决这个问题,因为该程序在其他系统上运行良好。

寻找主要方法;你不能依赖类名。
我知道,但由于我只有 .class 文件,我无法真正看到这些方法。或者我可以吗?
你不是真的在输入引号,是吗?无论如何,有很多方法可以查看方法,包括使用 javap。不过,您可能想解开它并查看是否实际上没有清单。
相关:具有依赖项:stackoverflow.com/a/23986765/360211
如果我在使用 CommandLineJobRunner 运行代码时没有主类怎么办

K
Kobedi

首先,看到您运行的是 java -jar "app" 而不是 java -jar app.jar,这有点奇怪

其次,要使 jar 可执行...您需要 jar 一个名为 META-INF/MANIFEST.MF 的文件

文件本身应该有(至少)这一行:

Main-Class: com.mypackage.MyClass

其中 com.mypackage.MyClass 是持有 public static void main(String[] args) 入口点的类。

请注意,有几种方法可以使用 CLI、Maven、Ant 或 Gradle 完成此操作:

对于 CLI,可以使用以下命令:(tks @dvvrt)

jar cmvf META-INF/MANIFEST.MF <new-jar-filename>.jar  <files to include>

对于 Maven,类似下面的代码片段应该可以解决问题。请注意,这只是插件定义,而不是完整的 pom.xml:

此插件的最新文档:请参阅 https://maven.apache.org/plugins/maven-jar-plugin/

<build>
  <plugins>
    <plugin>
      <!-- Build an executable JAR -->
      <groupId>org.apache.maven.plugins</groupId>
      <artifactId>maven-jar-plugin</artifactId>
      <version>3.1.0</version>
      <configuration>
        <archive>
          <manifest>
            <addClasspath>true</addClasspath>
            <classpathPrefix>lib/</classpathPrefix>
            <mainClass>com.mypackage.MyClass</mainClass>
          </manifest>
        </archive>
      </configuration>
    </plugin>
  </plugins>
</build>

(选择适合您项目的 <version>。)

对于 Ant,下面的代码片段应该会有所帮助:

<jar destfile="build/main/checksites.jar">
  <fileset dir="build/main/classes"/>
  <zipfileset includes="**/*.class" src="lib/main/some.jar"/>
  <manifest>
    <attribute name="Main-Class" value="com.acme.checksites.Main"/>
  </manifest>
</jar>

学分迈克尔·尼曼德-

对于 Gradle:

plugins {
    id 'java'
}

jar {
    manifest {
        attributes(
                'Main-Class': 'com.mypackage.MyClass'
        )
    }
}

在 Ant 中,它的 元素中
谢谢你。只是想补充一点,您可以使用以下命令将依赖项复制到 lib 文件夹:stackoverflow.com/a/996915/1121497。由于类路径包含该 lib 文件夹,因此您只需要使用 java -jar myproject.jar 执行 jar,它就会找到依赖项。
如何“jar 一个名为 META-INF/MANIFEST.MF 的文件”?我一方面有一个.jar,另一方面有一个.MF,我如何将它们链接在一起?我将清单放在与 .jar 相同的文件夹中,但它不起作用我仍然遇到问题!
@Wicelo 要在创建 jar 文件时指定特定的 MANIFEST.MF 文件,请使用 jar 的 m 标志。例如。 jar cmvf META-INF/MANIFEST.MF <new-jar-filename>.jar <files to include>
注意:对于 Maven,我在 VSC 生成的 Maven 文件中已经有一个 maven-jar-plugin 项,所以我只是添加了 <configuration> 部分。
J
Jesper

那应该是 java -jar app.jar 而不是 java -jar "app"

仅当 JAR 文件是可执行 JAR 文件时,-jar 选项才有效,这意味着它必须具有包含 Main-Class 属性的清单文件。请参阅 Packaging Programs in JAR Files 了解如何创建可执行 JAR。

如果它不是可执行的 JAR,那么您需要使用以下内容运行该程序:

java -cp app.jar com.somepackage.SomeClass

其中 com.somepackage.SomeClass 是包含运行程序的 main 方法的类。 (该类是什么取决于程序,从您提供的信息中无法判断)。


感谢您的回复,但只有当我知道包含 main 方法的类的名称时,您的解决方案才有效。这是一个错字......它应该是“app.jar”。但是你如何解释为什么它只通过双击文件就可以在其他系统上运行呢?
如果它确实是可执行 JAR,您可以提取清单文件(它位于 JAR 文件内的 META-INF 目录中)。它应该包含一个 Main-Class 属性,该属性为您提供主类的名称。
如果它不能在一个系统上运行,那么该系统可能有一个太旧的 Java 版本。例如,如果 JAR 是用 Java 7 编译的,那么您不能在具有 Java 6 或更早版本的系统上运行它。
这很有趣,因为另一个系统运行的是win7,而这台有问题的电脑运行的是win8。
@Jesper你好,如果eclipse使用默认包怎么办?我只输入班级名称吗?
e
eis

或者,您可以使用 maven-assembly-plugin,如下例所示:

<plugin>
    <artifactId>maven-assembly-plugin</artifactId>
    <executions>
      <execution>
        <phase>package</phase>
        <goals>
          <goal>single</goal>
        </goals>
      </execution>
    </executions>
    <configuration>
      <archive>
        <manifest>
          <addClasspath>true</addClasspath>
          <mainClass>com.package.MainClass</mainClass>
        </manifest>
      </archive>
      <descriptorRefs>
        <descriptorRef>jar-with-dependencies</descriptorRef>
      </descriptorRefs>
    </configuration>
  </plugin> 

在此示例中,部分中指定的所有依赖项 jar 将自动包含在您的单个 jar 中。请注意,jar-with-dependencies 应按字面意思表示,而不是替换为您要包含的 jar 文件名。


完美,这行得通。它将所有依赖项捆绑到一个 jar 中,从而允许您编译/构建项目并开箱即用地运行它。
shade plugin 的上下文中,必须遵循 Executable JAR 的帮助。
这与 maven-assembly-plugin 有效。 maven-jar-plugin 没有。
注意:把这段代码放到你的<build><plugins> PUT IT HERE </plugins></build>里面的pom.xml文件中,然后执行maven Package(在IDEA打开maven右侧滑动菜单,查找project > Lifecycle > package)。然后您的 jar 文件将位于 Target 文件夹中。干杯!
我真的在这个问题上苦苦挣扎......这非常有效。谢谢!
S
Sasanka Panguluri

这是因为 Java 在 MANIFEST.MF 文件中找不到 Main 属性。 Main 属性对于告诉 java 它应该使用哪个类作为应用程序的入口点是必要的。在 jar 文件中,MANIFEST.MF 文件位于 META-INF 文件夹中。想知道如何查看 jar 文件中的内容吗?用 WinRAR 打开 jar 文件。

MANIFEST.MF 中的主要属性如下所示:

Main-Class: <packagename>.<classname>

当 MANIFEST.MF 文件中缺少此行时,您会收到此“无主清单属性”错误。

在 MANIFEST.MF 文件中指定这个属性真的是一团糟。

更新:我刚刚找到了一种非常巧妙的方法来在 Eclipse 中指定应用程序的入口点。当你说出口时,

Select Jar and next 

[ give it a name in the next window ] and next

and next again

and you'll see " Select the class of the application entry point".

Just pick a class and Eclipse will automatically build a cool MANIFEST.MF for you.

https://i.stack.imgur.com/9V7F3.png


N
Naga Srinu Kapusetti

我遇到过同样的问题。通过在 pom 文件中添加以下行使其工作。该插件将确保您的应用程序的构建过程具有所有必要的步骤。

<build>
    <plugins>
        <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
        </plugin>
    </plugins>
</build>

完美运行,但考虑添加截至 2018 年 4 月的版本 org.springframework.boot spring-boot-maven-plugin 2.0.1.RELEASE< /版本>
抱歉,但这不是解决方案,因为他不是在谈论 Spring Boot,这是 jar 执行的一般问题:)
非常感谢,这解决了spring boot的问题!
我正在开发 Spring Boot 2.2.0.Release。不幸的是,这个解决方案对我不起作用。但是,当您从 pom.xml 中的 <parent>...</parent> 应用程序引用时,它会起作用。我的猜测是,如果我们访问 parent 应用程序的 pom.xml,我们会得到一个清晰的概念。
我终于用自定义 repackage-classifier 解决了我的问题。请访问docs.spring.io/spring-boot/docs/2.2.0.RELEASE/maven-plugin/…
m
morningstar

我在使用 IntelliJ IDEA 创建 jar 时遇到了这个问题。请参阅this discussion

为我解决的问题是重新创建 jar 工件,选择 JAR > From modules with dependencies,但不接受 META-INF/MANIFEST.MF 的默认目录。将其从 -/src/main/java 更改为 -/src/main/resources。

否则,它会在 jar 中包含一个清单文件,而不是它应该包含的 -/src/main/java 中的文件。


这对我来说适用于 IDEA 14.1.6。我还为 pom.xml 添加了构建属性,但没有效果。但是你的回答解决了,谢谢。
感谢您使我的桌面免于因没有其他工作而感到沮丧;)您的链接似乎已损坏,但我可以确认这可以正常工作。使用 IntelliJ IDEA 2018.2.5(社区版)测试
确认这有效,即使我没有 /resources 目录
断开的链接,您的意思是 https://stackoverflow.com/questions/20952713/wrong-manifest-mf-in-intellij-idea-created-jar
Q
QED

Gradle 的答案是添加一个 jar/manifest/attributes 设置,如下所示:

apply plugin: 'java'

jar {
    manifest {
        attributes 'Main-Class': 'com.package.app.Class'
    }
}

迄今为止最简单的答案。
有关在 Kotlin 上编写的 Gradle 构建脚本,请参阅 this answer
D
David

对于 maven,这就是解决它的方法(对我来说,对于 GitHub 上的 Veetle 代码库):

<build>
<plugins>
  <plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-shade-plugin</artifactId>
    <version>2.0</version>
    <executions>
      <execution>
        <phase>package</phase>
        <goals>
          <goal>shade</goal>
        </goals>
        <configuration>
          <transformers>
            <transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
              <mainClass>org.lazydevs.veetle.api.VeetleAPI</mainClass>
            </transformer>
          </transformers>
        </configuration>
      </execution>
    </executions>
  </plugin>
 </plugins>
</build>

干杯...


我发现这行得通,但我必须执行,因为 mvn package shade:shade 只是运行 mvn package 并没有触发阴影插件运行。
E
Eric Leschinski

试试这个命令来包含 jar:

java -cp yourJarName.jar your.package..your.MainClass

一种方法是在 pom.xml 中包含主类并使用 java -jar 命令,另一种是使用 java -cp 命令。
e
eis

对我来说,没有一个答案真的有帮助 - 我将清单文件放在正确的位置,包含 Main-Class 和所有内容。让我绊倒的是:

警告:您从中创建清单的文本文件必须以换行符或回车符结尾。如果最后一行没有以新行或回车结束,则不会正确解析。

(source)。在清单末尾添加换行符修复它。


s
shuang

如果使用 Maven,请在 pom 中包含以下内容

<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>1.4.2.RELEASE</version>
</parent>

<properties>
    <java.version>1.8</java.version>
</properties>

<build>
    <plugins>
        <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
        </plugin>
    </plugins>
</build>

谁说这是一个 Spring Boot 项目?
@james.garriss 好吧,我会说,我来这篇文章是为了寻找 no main manifest attribute 错误,但我正在开发 Spring Boot 应用程序,所以这个答案对我有帮助。我已经知道如何创建 META-INF/MANIFEST.MF 文件,但不知道如何让 spring-boot 自动处理它。
我看不出有什么理由不赞成这个答案。如果您不使用 spring-boot,请忽略它。 Stackoverflow 还有助于构建您自己在编程时遇到的问题存储库。
@Vishrant我不了解其他人,但我投了反对票,因为这个答案没有解决提出的问题。它可能只是碰巧回答了你的问题,但你的问题并不是真正被问到的。
@Bane 当然。但是这个问题可以从广义上理解,这个答案适用于它,并且可以在他们使用弹簧靴时帮助其他人。
Y
Yury Finchenko

MAVEN 的问题是,当您使用 ARTIFACTS 时,它尝试包含来自依赖项的第一个库的第一个 MANIFEST.MF 文件,而不是我们自己的 MANIFEST.MF!

将 yourjar.jar 重命名为 yourjar.zip 从 META-INF\MANIFEST.MF 打开 MANIFEST.MF 文件 复制 MAVEN 在项目中已经生成的真实 MANIFEST.MF 其中包括:Manifest-Version: 1.0 Main-Class: yourpacket .yourmainclass (for exmaple info.data.MainClass) 用它替换 youjar.zip 中的 MANIFEST.MF 的内容。将 yourjar.zip 重命名为 yourjar.jar。现在 java -jar yourjar.jar 工作完美。

或者!

简单地创建您自己的 MANIFEST.MF 并:

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-jar-plugin</artifactId>
    <version>3.2.0</version>
    <configuration>
        <archive>
            <manifestFile> Your path like: src/main/resources/META-INF/MANIFEST.MF </manifestFile>
            <index>true</index>
                <manifest>
                    <addClasspath>true</addClasspath>
                </manifest>
        </archive>
    </configuration>
</plugin>

但是如果您使用 maven 面板(或 maven 命令行),您可以强制它生成自己的清单并将其包含到 JAR 文件中。

将此代码添加到 pom.xml 的构建部分: org.apache.maven.plugins maven-assembly-plugin 3.2.0 package single jar-with-dependencies true true yourpacket.yourmainclass(例如 info.data.MainClass) development ${project.url} 打开MAVEN 面板(在 Intellij 中)并执行“安装”。它将生成 MANIFEST 文件并将具有所有依赖项的 JAR 文件的属性编译到“Target”文件夹中。它还将安装到本地 Maven 存储库。


M
MTA

我今天有同样的问题。我的问题已解决,我将 META-INF 移动到资源文件夹。


这对我也有用。如果您使用的是 Jetbrains IntelliJ,请尝试一下
B
Binakot

我刚才得到了同样的错误。如果您使用 gradle,只需在您的 gradle.build 中添加下一个:

apply plugin: 'java'

jar {
    manifest {
        attributes 'Main-Class': 'com.company.project.MainClass'
    }
}

使用 public static void main(String[] args) 方法指向您的类的 com.company.project.MainClass 路径。


这对我有帮助! gradle 教程已指定使用顶级 mainClassName 变量集,但这仅有助于 gradle run 命令,而不是创建可执行的 .jar
J
John M

如果 jar 未遵循 the rules,则它不是可执行 jar。


请在回答问题时具体说明,请参阅其他答案
A
Andrew

如果您使用命令行来组装 .jar,则可以在不添加 Manifest 文件的情况下指向 main。例子:

jar cfve app.jar TheNameOfClassWithMainMethod *.class

(参数“e”这样做:TheNameOfClassWithMainMethod 是具有方法 main() 和 app.jar 的类的名称 - 可执行 .jar 和 *.class 的名称 - 只是要组装的所有类文件)


C
CodeMonkey

我有同样的问题。这里提到的很多解决方案并没有给我全貌,所以我会尝试给你一个关于如何从命令行打包 jar 文件的总结。

如果您想在包中包含 .class 文件,请将包添加到 .java 的开头。 Test.java 封装testpackage; public class Test { ... } 编译你的代码,你的 .class 文件以包名给出的结构结束,使用:javac -d。 Test.java 的 -d 。使编译器创建您想要的目录结构。打包 .jar 文件时,您需要指示 jar 例程如何打包它。这里我们使用选项集 cvfeP。这是为了保持包结构(选项 P),指定入口点以便清单文件包含有意义的信息(选项 e)。选项 f 让您指定文件名,选项 c 创建存档,选项 v 将输出设置为详细。这里要注意的重要事项是 P 和 e。然后是我们想要的 jar 的名称 test.jar。然后是入口点。然后是 -C 。 / 从该文件夹中获取类文件,保留文件夹结构。 jar cvfeP test.jar testpackage.Test -C 。 testpackage/ 在 zip 程序中检查您的 .jar 文件。它应该具有以下结构 test.jar META-INF | MANIFEST.MF 测试包 | Test.class MANIFEST.MF 应包含以下 Manifest-Version: 1.0 Created-By: (Oracle Corporation) Main-Class: testpackage.Test 如果您手动编辑清单,请确保将换行符保留在否则java无法识别它。使用 java -jar test.jar 执行您的 .jar 文件


您回答的第四步非常重要!我的清单无法正常工作,因为最后我不知道我必须输入换行符。我访问过的关于这个主题的所有答案(很多)都没有提到这一点,对于不使用 maven、ant、gradle 等的任何人来说都是强制性的。
@Maude 感谢您的反馈。这正是为什么我用粗体的换行提示添加答案的原因。我找了好几天,直到通过与自动生成的清单进行比较发现了这一点。
哈,谢谢。我只是在那个换行符上敲我的头。
d
djangofan

我个人认为这里的所有答案都是对问题的误解。这个问题的答案在于 spring-boot 构建 .jar 的方式不同。每个人都知道 Spring Boot 设置了这样的清单,这与每个人都假设这是一个标准的 .jar 启动有所不同,它可能是也可能不是:

Start-Class: com.myco.eventlogging.MyService
Spring-Boot-Classes: BOOT-INF/classes/
Spring-Boot-Lib: BOOT-INF/lib/
Spring-Boot-Version: 1.4.0.RELEASE
Created-By: Apache Maven 3.3.9
Build-Jdk: 1.8.0_131
Main-Class: org.springframework.boot.loader.JarLauncher

也许它需要在类路径上使用 org.springframework.boot.loader.JarLauncher 执行?


这听起来很有希望。您究竟如何将 JarLauncher 添加到类路径中?
K
KarthikPon

我遇到了同样的问题,现在已经解决了:)只需按照以下步骤操作,错误可能是任何原因,但以下步骤使过程更顺畅。我花了很多时间来寻找解决方法。

1.尝试重新启动 Eclipse(如果您使用 Eclipse 构建 JAR 文件)-> 实际上这有助于我正确导出 JAR 文件的问题。

2.eclipse重启后,试试看你的eclipse是否能通过你的Java项目识别主类/方法-->右键-->运行为-->运行配置-->主-->点击搜索按钮查看您的 Eclipse 是否能够在 JAR 文件中查找您的主类。 --> 这是为了验证 JAR 文件是否有主类的入口点。

在此之后,将您的 Java 动态项目导出为“Runnable JAR”文件而不是 JAR 文件。在 Java 启动配置中,选择您的主类。导出 jar 文件后,使用以下命令执行。 java -cp [Your JAR].jar [complete package].MainClass eg: java -cp AppleTCRuleAudit.jar com.apple.tcruleaudit.classes.TCRuleAudit 你可能会遇到不支持的java版本错误。解决方法是更改 shell bash 配置文件中的 java_home 以匹配用于在 eclipse 中编译项目的 java 版本。

希望这可以帮助!如果您还有任何问题,请告诉我。


D
Dave Beauchesne

我找到了不良清单生成的新解决方案!

使用 WinRAR 等 zip 编辑器打开 jar 文件 单击 META-INF 添加或编辑 添加:在名为 META-INF 的文件夹中创建一个名为 MANIFEST.MF 的文本文件,并添加以下行:Manifest-Version: 1.0 Main-Class : package.ex.com.views.mainClassName 保存文件并将其添加到 zip 编辑:将文件拖出修改 MANIFEST.MF 以添加上一行 打开 cmd 并键入:java -jar c:/path/JarName。罐

现在应该可以正常工作了!


D
Darshil Shah

我试过这个,它对我有用。 mvn clean install package 应该可以工作。

<build>
    <plugins>
        <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
            <executions>
            <execution>
                <goals>
                    <goal>repackage</goal>
                </goals>
            </execution>
            </executions>
        </plugin>
    </plugins>
</build>

S
Shekh Akther

任何可执行的 jar 文件都应该通过单击或使用命令提示符运行来运行,例如 java -jar app.jar(使用“如果 jar 的路径包含空格” - 即 java -jar “C:\folder name\app.jar”)。如果您的可执行 jar 没有运行,这意味着它没有正确创建。

为了更好地理解,提取 jar 文件(或使用任何工具查看,对于 windows 7-Zip 是一个不错的工具)并检查 /META-INF/MANIFEST.MF 下的文件。如果您发现任何条目,例如

Main-Class: your.package.name.ClaaswithMain - 那么就可以了,否则你必须提供它。

请注意在 MANIFEST.MF 文件上附加 Main-Class 条目,检查保存位置!


K
Koneri

你可以简单地按照这个步骤使用创建一个 jar 文件

 jar -cfm jarfile-name manifest-filename Class-file name

在运行 jar 文件时,像这样简单运行

 java -cp jarfile-name main-classname

k
kenorb

您可能没有正确创建 jar 文件:

例如:在创建 jar 时缺少选项 m

以下作品:

jar -cvfm MyJar.jar Manifest.txt *.class

D
Dharman

就我而言,问题是 <build> 下的 <pluginManagement> 使事情无法正常工作。

我原来的 pom.xml:

<build>
  <pluginManagement>
    <plugins>
      <plugin>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-maven-plugin</artifactId>
        ...
        ...
        ...
  </pluginManagement>
</build>

删除 <pluginManagement> 后,错误消失了。


非常感谢,这成功了!
N
Neeraj Bhatnagar

对我来说,这个错误的发生仅仅是因为我忘记告诉 Eclipse 我想要一个可运行的 jar 文件而不是一个简单的库 jar 文件。因此,当您在 Eclipse 中创建 jar 文件时,请确保单击正确的单选按钮


m
mwag

以上答案对我只有部分帮助。 java -cp 是答案的一部分,但我需要更多关于如何识别要运行的类的具体信息。这对我有用:

第 1 步:找到我需要运行的类

jar tf /path/to/myjar.jar | more

结果的顶部是:

META-INF/
META-INF/MANIFEST.MF
somepath/
somepath/App.class
META-INF/maven/
...

App.class 包含要运行的主类。我不是 100% 确定你是否总是可以假设你需要的课程是第一个,但它是给我的。如果不是,我想使用 grep 排除与库相关的结果以将类列表缩减到可管理的大小并不难。

从那里开始很容易:我只使用该路径(减去“.class”后缀):

java -cp /path/to/myjar.jar somepath/App

它并不总是头等舱。几乎没有。命令行应为 java -cp ... somepackage.App
F
Fan Yer

由于您添加了 MANIFEST.MF,我认为您应该考虑此文件中字段的顺序。我的环境是 java version "1.8.0_91"

和我的 MANIFEST.MF 在这里

// MANIFEST.MF
Manifest-Version: 1.0
Created-By: 1.8.0_91 (Oracle Corporation)
Main-Class: HelloWorldSwing

// run
~ java -jar HelloWorldSwing.jar
no main manifest attribute, in HelloWorldSwing.jar

但是,如下所示

Manifest-Version: 1.0
Main-Class: HelloWorldSwing
Created-By: 1.8.0_91 (Oracle Corporation)

//this run swing normally

诶?顺序无关紧要。不清楚你在声称什么。
M
MichaelT

(第一篇文章 - 所以它可能不干净)

这是我对 OS X 11.6、基于 Maven 的 Netbeans 8.2 程序的修复。到目前为止,我的应用程序是 100% Netbeans - 没有调整(只是一些不可能的 shell 转义!)。

在这里和其他地方尝试了大多数答案都无济于事,我回到了“使用有效的方法”的艺术。

这里的最佳答案 (olivier-refalo thanx) 看起来是正确的起点,但没有帮助。

查看其他确实有效的项目,我注意到清单行中的一些细微差别:

addClasspath,classpathPrefix 不存在(删除它们) mainClass 缺少“com”。 (用NB->Project Properties->Run->Main Class->Browse来指定)

不知道为什么(我才 3 个月进入 Java)或如何,但只能说这有效。

这只是使用的修改后的清单块:

    <manifest>
        <mainClass>mypackage.MyClass</mainClass>
    </manifest>

R
Reihan_amn

只是为了明确一点

Main-Class: <packagename>.<classname>

如果您没有包,则必须忽略该部分,如下所示:

Main-Class: <classname>

我投反对票有什么问题吗?!