java—如何在“属性”部分配置maven插件的属性

disbfnqx  于 2021-07-05  发布在  Java
关注(0)|答案(1)|浏览(380)

要为jar和程序集插件配置清单文件中声明的主类,我必须打开插件声明中的配置标记,如下例所示:

<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>

但是,通常情况下,为了避免在plugin部分使用这些配置标记,使pom.xml更容易阅读,我在properties部分使用以下属性配置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和程序集插件生成的清单文件中声明的主类?
查看关于jar插件的maven文档:https://maven.apache.org/archives/maven-1.x/plugins/jar/properties.html
提到属性“maven.jar.mainclass”,我相信在某些时候,可以通过项目属性部分定义清单文件的主类,如下所示:

<properties>
        <maven.jar.mainclass>com.example.Main</maven.jar.mainclass>
    </properties>

但是,当我尝试运行以这种方式生成的jar时,会收到错误消息“no main manifest attribute,in example.jar”。那么,有没有办法配置主类而不必直接在plugins部分打开那些配置标签呢?

mgdq6dx1

mgdq6dx11#

<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 . 它是强大的,但在这种情况下,您的jar由于不存在类而变得毫无用处,而且这样的问题几乎不可能追溯到以前。

相关问题