首页 > 解决方案 > 我需要在我的 pom.xml 中添加什么来运行这个特定的 Java 文件?

问题描述

我不是 Java 开发人员,不熟悉 Java 程序的打包和构建。我正在尝试运行此文件: https ://github.com/CodinGame/SpringChallenge2020/blob/master/src/test/java/Spring2020Main.java

通过做

mvn clean install
java -jar .\target\spring-2020-1.0-SNAPSHOT.jar

但我收到此错误:

no main manifest attribute, in .\target\spring-2020-1.0-SNAPSHOT.jar

我一生无法弄清楚我需要添加到 pom.xml 中的内容,或者我需要做的任何其他事情才能使其正常工作。

任何帮助将不胜感激。

标签: javamavenbuild

解决方案


您可以按照以下步骤操作:

  1. 移动Spring2020Main.javasrc/main/java/com/codingame目录
  2. 在 pom.xml 之后添加以下内容</dependencies>
<build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-shade-plugin</artifactId>
            <version>3.2.3</version>
            <executions>
                <execution>
                    <phase>package</phase>
                    <goals>
                        <goal>shade</goal>
                    </goals>
                    <configuration>
                        <transformers>
                            <transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
                                <mainClass>com.codingame.Spring2020Main</mainClass>
                            </transformer>
                        </transformers>
                    </configuration>
                </execution>
            </executions>
        </plugin>
    </plugins>
</build>    
  1. 使用运行 Maven 构建mvn clean install
  2. 使用执行程序java -jar target/spring-2020-1.0-SNAPSHOT.jar

信息: Apache Maven Shade 插件有助于构建所谓的 uber-jar 或 fat-jar。这意味着所有依赖项都打包为生成的 jar 文件的一部分,而无需在classpath执行 jar 文件时添加任何“库”。作为最终 jar 的一部分,我们需要指定需要将哪个文件视为要执行的主文件。这通常使用META-INF/MANIFEST.MFuber-jar 中的文件来完成。这就是插件transformer内部指定的configuration为我们所做的。


推荐阅读