我想用maven编译我的Java-Project,但它没有将main-class添加到manifest文件中。所以我不能在intellij之外运行jar。我已将main-class添加到我的pom.xml中,但它没有显示在清单文件中。
我在Win10机器和maven3(IntelliJ IDEA 2018.3.1 / plugins / maven / lib / maven3)上使用intellij的构建功能。
如果我运行jar我得到错误
$java -jar myJar.jar
kein Hauptmanifestattribut, in myJar.jar
(德语为:没有主要的清单属性,在myJar.jar中,我不知道确切的英文翻译,但它意味着:没有指定主类)
我已经尝试了几个maven插件(maven-compile,maven-jar,maven-shade)以及指定main-class的方法,但是没有将它们添加到manifest文件中。让这个工作的唯一方法是当我添加线
Main-Class: Main
用手。
我的pom文件(是的,我的主类称为Main,是的,当我手动添加它时它工作正常)
...
<groupId>com.myname</groupId>
<artifactId>myProject</artifactId>
<version>1.0-SNAPSHOT</version>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<configuration>
<archive>
<manifest>
<addClasspath>true</addClasspath>
<mainClass>Main</mainClass>
</manifest>
</archive>
</configuration>
</plugin>
</plugins>
</build>
<properties>
<maven.compiler.source>1.8</maven.compiler.source>
<maven.compiler.target>1.8</maven.compiler.target>
</properties>
...
清单文件
Manifest-Version: 1.0
Archiver-Version: Plexus Archiver
Built-By: dspicuzz
Created-By: Apache Maven 3.3.9
Build-Jdk: 1.8.0_65
如果我手动添加该行,它运行正常
Manifest-Version: 1.0
Archiver-Version: Plexus Archiver
Built-By: dspicuzz
Created-By: Apache Maven 3.3.9
Build-Jdk: 1.8.0_65
Main-Class: Main
但我不能让maven以这种方式为我生成它。
我在Win10机器和maven3(IntelliJ IDEA 2018.3.1 / plugins / maven / lib / maven3)上使用intellij的构建功能。
IntelliJ的构建不会重新生成您的jar文件。尝试运行包目标以重新创建jar文件。
验证您的包名称是否与您的目录结构匹配:com.mytest.Main
如果没有包,它也可以工作,但要确保目录结构也没有包结构。
这将有效:
pom.hml
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.myname</groupId>
<artifactId>runnable</artifactId>
<version>1.0-SNAPSHOT</version>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<configuration>
<archive>
<manifest>
<addClasspath>true</addClasspath>
<mainClass>com.myname.Hello</mainClass>
</manifest>
</archive>
</configuration>
</plugin>
</plugins>
</build>
<properties>
<maven.compiler.source>1.8</maven.compiler.source>
<maven.compiler.target>1.8</maven.compiler.target>
</properties>
</project>
hello.Java
package com.myname;
public class Hello {
public static void main(String[] args) {
System.out.println("Hello");
}
}
跑:
C:\runnable>java -jar target\runnable-1.0-SNAPSHOT.jar
Hello
而且,这是maven-jar插件生成的清单文件:
Manifest-Version: 1.0
Archiver-Version: Plexus Archiver
Built-By: egallardo
Created-By: Apache Maven 3.3.9
Build-Jdk: 1.8.0_181
Main-Class: com.myname.Hello
还要检查您的sources目录是否在intellij中正确标记(浅蓝色)此图像适用于无包装版本。
这些是如何使用IntelliJ从头开始创建项目的分步说明:
<build>
检查jar文件日期是否与单击包的时间相匹配。如果上述方法无效,您可能会发现错误。尝试不同的JDK版本。