簡體   English   中英

maven沒有正確添加主類

[英]maven didn't add main-class properly

我想用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.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

還要檢查您的sources目錄是否在intellij中正確標記(淺藍色)此圖像適用於無包裝版本。

在此輸入圖像描述

這些是關於如何使用IntelliJ從頭開始創建項目的分步說明:

  • 創建新項目
  • 選擇Maven
  • 選擇你的SDK(Java 1.8左右)
  • 不選中“從原型創建”
  • 點擊下一步
  • 組ID:com.myapp
  • 工件id:runnable
  • 版本:1.0-SNAPSHOT(默認)
  • 點擊下一步
  • 項目名稱:runnable(默認)
  • 項目位置:C:\\ code \\ java \\ runnable
  • 單擊完成
  • 如果出現提示,請選擇“啟用自動導入”
  • <build><properties>部分復制並傳遞到pom.xml文件
  • 展開runnable - > src - > main - > java
  • 右鍵單擊java文件夾,然后單擊New - > java class
  • 鍵入Main作為新類名稱和類:class(默認)
  • 鍵入psvm並單擊選項卡以生成主方法
  • 添加一個print語句:System.out.println(“Hello”);
  • 使用maven選項卡雙擊包
  • jar文件將在C:\\ code \\ java \\ runnable \\ target \\ runnable-1.0-SNAPSHOT.jar中創建
  • 嘗試運行它:

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

檢查jar文件日期是否與單擊包的時間相匹配。 如果上述方法無效,您可能會發現錯誤。 嘗試不同的JDK版本。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM