【问题标题】:How to configure the properties of the maven plug-ins in the "properties" section如何在“属性”部分配置maven插件的属性
【发布时间】:2020-12-22 20:19:35
【问题描述】:

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

但是,通常情况下,为了避免插件部分中的这些配置标记以使 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文件中声明的主类可以用同样的方式配置吗?

查看有关 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 时,我收到错误消息“在 example.jar 中没有主清单属性”。 那么有没有什么方法可以配置主类而不用直接在plugins部分打开那些配置标签呢?

【问题讨论】:

    标签: java maven pom.xml maven-plugin maven-jar-plugin


    【解决方案1】:
    <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 由于类不存在而变得无用,并且此类问题几乎无法追溯。

    【讨论】:

      猜你喜欢
      • 2015-06-01
      • 2016-02-13
      • 2014-01-28
      • 2011-11-25
      • 1970-01-01
      • 2017-01-24
      • 2015-09-24
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多