Maven没有正确添加主类

时间:2019-04-25 12:50:43

标签: java maven intellij-idea pom.xml manifest

我想用maven编译我的Java-Project,但是它没有将主类添加到清单文件中。所以我不能在intellij之外运行jar。我已经将主类添加到了pom.xml中,但未在清单文件中显示。

我正在Win10机器和maven3(IntelliJ IDEA 2018.3.1 / plugins / maven / lib / maven3)上使用intellij的构建功能。

如果我运行罐子,我会收到错误消息

val shareIntent = Intent(Intent.ACTION_SEND)
shareIntent.apply {
    setPackage(YOUTUBE_PACKAGE)
    type = "video/*"
    putExtra(Intent.EXTRA_TITLE, title)
    putExtra(Intent.EXTRA_SUBJECT, shareMessage)
    putExtra(Intent.EXTRA_STREAM, videoUri)
}

(德语为:在myJar.jar 中没有主清单属性,我不知道确切的英语翻译,但这意味着:未指定主类

我尝试了服务器式Maven插件(maven-compile,maven-jar,maven-shade)和指定主类的方法,但没有一个将其添加到清单文件中。我要使它起作用的唯一方法是当我添加线

$java -jar myJar.jar
kein Hauptmanifestattribut, in myJar.jar
用手

我的pom文件(是的,我的主类叫做 Main ,是的,当我手动添加它时,它工作正常)

Main-Class: 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

但是我无法让Maven以这种方式为我生成它。

1 个答案:

答案 0 :(得分:1)

  

我正在Win10机器和maven3上使用intellij的构建功能   (IntelliJ IDEA 2018.3.1 / plugins / maven / lib / maven3)。

IntelliJ的构建不会重新生成您的jar文件。尝试运行软件包目标以重新创建jar文件。

验证您的软件包名称与您的目录结构匹配:com.mytest.Main

如果没有包,它也可以工作,但是请确保目录结构也没有包结构。

这将起作用:

pom.xml

<?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

还要检查您的源代码目录是否已正确标记为intellij(浅蓝色)。此图像用于无包装版本。

enter image description here

这些是有关如何使用IntelliJ从头开始创建项目的分步说明:

  • 创建新项目
  • 选择Maven
  • 选择您的SDK(Java 1.8左右)
  • 取消选中“从原型创建”
  • 单击下一步
  • 组ID:com.myapp
  • 工件ID:可运行
  • 版本:1.0-快照(默认)
  • 单击下一步
  • 项目名称:可运行(默认)
  • 项目位置:C:\ code \ java \ runnable
  • 单击完成
  • 如果出现提示,请选择“启用自动导入”
  • <build><properties>部分复制并粘贴到pom.xml文件中
  • 展开可运行-> src-> main-> java
  • 右键单击java文件夹,然后单击“新建”->“ java类”
  • 键入Main作为新的类名称和种类:class(默认)
  • 输入psvm并单击选项卡以生成主要方法
  • 添加打印语句:System.out.println(“ H​​ello”);
  • 使用Maven选项卡双击程序包
  • 将在C:\ code \ java \ runnable \ target \ runnable-1.0-SNAPSHOT.jar中创建jar文件
  • 尝试通过以下方式运行它:

java -jar C:\code\java\runnable\target\runnable-1.0-SNAPSHOT.jar

检查jar文件的日期是否与单击包时的时间匹配。 如果上述方法不起作用,则可能是您发现了一个错误。尝试使用其他JDK版本。