有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java maven没有正确添加mainclass

我想用maven编译我的Java项目,但它没有将主类添加到清单文件中。所以我不能在intellij之外运行罐子。我已经在我的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: 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用这种方式为我生成它


共 (1) 个答案

  1. # 1 楼答案

    I'm using the build function of intellij on a Win10 machine and maven3 (IntelliJ IDEA 2018.3.1/plugins/maven/lib/maven3).

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

    验证包名是否与目录结构匹配:com.mytest.Main

    如果没有包,它也会工作,但确保目录结构也没有包结构

    这将起作用:

    波姆。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>
    

    你好。爪哇

    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-SNAPSHOT(默认)
    • 单击下一步
    • 项目名称:可运行(默认)
    • 项目位置:C:\code\java\runnable
    • 点击Finish
    • 如果出现提示,请选择“启用自动导入”
    • <build><properties>部分复制并通过到pom。xml文件
    • 展开runnable->;src->;主要->;爪哇
    • 右键单击java文件夹,然后单击新建->;java类
    • 键入Main作为新的类名和种类:class(默认)
    • 键入psvm并单击tab以生成main方法
    • 添加打印语句:系统。出来println(“你好”)
    • 使用maven选项卡双击包
    • jar文件将在C:\code\java\runnable\target\runnable-1.0-SNAPSHOT中创建。罐子
    • 尝试使用以下工具运行:

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

    检查jar文件日期是否与单击package时的时间匹配。 如果上述方法不起作用,您可能已经发现了一个bug。尝试不同的JDK版本