在"properties"段如何配置maven插件的属性
How to configure the properties of the maven plug-ins in the "properties" section
要为 jar 和程序集插件配置清单文件中声明的主要 class,我必须在插件声明中打开配置标签,如下例所示:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<version>3.2.0</version>
<configuration>
<archive>
<manifest>
<mainClass>com.example.Main</mainClass>
</manifest>
</archive>
</configuration>
</plugin>
我必须做一些类似的事情来配置构建插件使用的 java 版本:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.8.1</version>
<configuration>
<source>11</source>
<target>11</target>
</configuration>
</plugin>
但是,通常情况下,为了避免插件部分中的这些配置标签以使 pom.xml 更容易阅读,我配置 java 中使用的 java 版本在属性部分中具有以下属性的编译器插件:
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<maven.compiler.source>11</maven.compiler.source>
<maven.compiler.target>11</maven.compiler.target>
</properties>
是否可以将jar和汇编插件生成的manifest文件中声明的mainclass配置成同样的方式?
查看有关 jar 插件的旧 Maven 文档:
https://maven.apache.org/archives/maven-1.x/plugins/jar/properties.html
提到了属性“maven.jar.mainclass”,我相信在某些时候可以通过项目属性部分如下定义清单文件的主要class :
<properties>
<maven.jar.mainclass>com.example.Main</maven.jar.mainclass>
</properties>
但是当我尝试 运行 以这种方式生成的 jar 时,我收到错误消息“example.jar 中没有主清单属性”。
那么有什么方法可以配置主要 class 而不必直接在插件部分打开那些配置标签?
<properties>
<maven.jar.mainclass>com.example.Main</maven.jar.mainclass>
</properties>
...
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<version>3.2.0</version>
<configuration>
<archive>
<manifest>
<mainClass>${maven.jar.mainclass}</mainClass>
</manifest>
</archive>
</configuration>
</plugin>
您始终可以在任何地方使用自己的占位符并将它们指定为 属性。请注意,现在该值不再是常量,而是变成了变量。换句话说,您现在可以使用 mvn package -Dmaven.jar.mainclass=path.to.nonexstingClass
。它很强大,但是在这种情况下,由于 non-existing class,你的 jar 已经变得无用了,而且这样的问题几乎无法追溯。
要为 jar 和程序集插件配置清单文件中声明的主要 class,我必须在插件声明中打开配置标签,如下例所示:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<version>3.2.0</version>
<configuration>
<archive>
<manifest>
<mainClass>com.example.Main</mainClass>
</manifest>
</archive>
</configuration>
</plugin>
我必须做一些类似的事情来配置构建插件使用的 java 版本:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.8.1</version>
<configuration>
<source>11</source>
<target>11</target>
</configuration>
</plugin>
但是,通常情况下,为了避免插件部分中的这些配置标签以使 pom.xml 更容易阅读,我配置 java 中使用的 java 版本在属性部分中具有以下属性的编译器插件:
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<maven.compiler.source>11</maven.compiler.source>
<maven.compiler.target>11</maven.compiler.target>
</properties>
是否可以将jar和汇编插件生成的manifest文件中声明的mainclass配置成同样的方式?
查看有关 jar 插件的旧 Maven 文档: https://maven.apache.org/archives/maven-1.x/plugins/jar/properties.html
提到了属性“maven.jar.mainclass”,我相信在某些时候可以通过项目属性部分如下定义清单文件的主要class :
<properties>
<maven.jar.mainclass>com.example.Main</maven.jar.mainclass>
</properties>
但是当我尝试 运行 以这种方式生成的 jar 时,我收到错误消息“example.jar 中没有主清单属性”。 那么有什么方法可以配置主要 class 而不必直接在插件部分打开那些配置标签?
<properties>
<maven.jar.mainclass>com.example.Main</maven.jar.mainclass>
</properties>
...
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<version>3.2.0</version>
<configuration>
<archive>
<manifest>
<mainClass>${maven.jar.mainclass}</mainClass>
</manifest>
</archive>
</configuration>
</plugin>
您始终可以在任何地方使用自己的占位符并将它们指定为 属性。请注意,现在该值不再是常量,而是变成了变量。换句话说,您现在可以使用 mvn package -Dmaven.jar.mainclass=path.to.nonexstingClass
。它很强大,但是在这种情况下,由于 non-existing class,你的 jar 已经变得无用了,而且这样的问题几乎无法追溯。