maven-jar-plugin Maven插件究竟是做什么的?使用和不使用这个插件有什么区别?

What exactly do the maven-jar-plugin Maven plugin? What is the difference using or not using this plugin?

我正在开发一个简单的 Spring 控制台应用程序(这是一个具有 class 和 classic main() 方法 () 的批处理,我有以下内容对 pom.xml Maven 文件有疑问。此文件仅包含工作所需的 Spring 依赖项。当我 运行 Maven install 语句时,它生成相关的 .jar 编译应用程序到 target 我项目的目录。

我正在寻找我过去工作过的另一个类似的旧项目并进入它的 pom.xml 我可以找到这个 maven-jar -plugin 插件:

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-jar-plugin</artifactId>
    <configuration>
        <archive>
            <manifest>
                <mainClass>com.myCompany.main.MainClass</mainClass>
            </manifest>
        </archive>
    </configuration>
</plugin>

那么这个 maven-jar-plugin 到底做了什么(也不使用它 maven install 语句生成编译的 .jar 文件)。使用和不使用这个插件有什么区别?

jar 插件允许我们定义一个默认清单文件。使用该选项,位于 ${project.build.outputDirectory}/META-INF/MANIFEST.MF 的文件将成为 jar 中的清单文件 maven jar 插件提供了构建 jars 文件的能力,如果你定义你的项目被打包为一个 jar 文件,maven 将隐式调用这个插件。我们不需要在里面定义它 pom.xml 它会在 maven 需要时下载并执行 it.So 不管你是否在你的 pom 中使用它,如果需要它会被 maven 自动加载.

参考此 link 以获得更好的理解 https://examples.javacodegeeks.com/enterprise-java/maven/maven-jar-plugin-example/

Maven Jar 插件负责配置项目的主要 class 所在的位置,以便将其添加到 Jar 的清单文件中。如果在尝试 运行 jar 文件时不包含此插件,则会出现此错误:

 Exception in thread "main" java.lang.NoClassDefFoundError 

无论您是否在其他地方添加了这一行:

<mainClass>yourapp.Mainclass</mainClass>

正确的方法是在maven-jar-plugin中加入上面这行