编程语言
首页 > 编程语言> > java – 让maven执行程序并将输出存储到可以在.jar清单中使用的属性中

java – 让maven执行程序并将输出存储到可以在.jar清单中使用的属性中

作者:互联网

我想将git describe作为maven构建的一部分执行,并使用清单中的结果输出来构建.jar包.

我知道how to do this in ant通过<exec> task输出属性到一个ant属性变量,但我对Maven的经验很少,甚至不知道在哪里看.

这可能吗?

我在一个示例pom.xml文件中找到了这个,所以adding something to the manifest看起来很简单:

<project>
    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-jar-plugin</artifactId>
                <version>2.6</version>
                <configuration>
                    <archive>
                        <manifest>
                            <addClasspath>true</addClasspath>
                            <mainClass>my.class.here.Myclass</mainClass>
                            <classpathLayoutType>custom</classpathLayoutType>
                            <customClasspathLayout>lib/$${artifact.artifactId}-$${artifact.version}$${dashClassifier?}.$${artifact.extension}</customClasspathLayout>
                        </manifest>
                    </archive>
                </configuration>
            </plugin>
        </plugins>
    </build>
</project>

不知道如何捕获命令执行.

解决方法:

以下是建议的方法:

>使用Exec Maven Plugin启动git命令并写入属性文件(如果可能,名称=值模式)
>使用Properties Maven Plugin加载配置

然后,加载的配置可用作POM中的属性.我们基本上是动态创建构建的属性.为此(使用这些属性),必须在构建流程中尽早执行上述步骤(即验证或初始化阶段).

下面是一个流程示例,刚刚测试并完美运行(在Windows机器上):

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>com.sample</groupId>
    <artifactId>generation</artifactId>
    <version>0.0.1-SNAPSHOT</version>

    <build>
        <plugins>
            <plugin>
                <groupId>org.codehaus.mojo</groupId>
                <artifactId>exec-maven-plugin</artifactId>
                <version>1.1</version>
                <executions>
                    <execution>
                        <id>retrieve-config</id>
                        <phase>validate</phase>
                        <goals>
                            <goal>exec</goal>
                        </goals>
                    </execution>
                </executions>
                <configuration>
                    <executable>echo</executable>
                    <arguments>
                        <argument>jar.name=from-exec</argument>
                        <argument>></argument>
                        <argument>config.properties</argument>
                    </arguments>
                    <workingDirectory>${basedir}/src/main/resources/</workingDirectory>
                </configuration>
            </plugin>

            <plugin>
                <groupId>org.codehaus.mojo</groupId>
                <artifactId>properties-maven-plugin</artifactId>
                <version>1.0-alpha-2</version>
                <executions>
                    <execution>
                        <id>read-properties</id>
                        <phase>initialize</phase>
                        <goals>
                            <goal>read-project-properties</goal>
                        </goals>
                        <configuration>
                            <files>
                                <file>${basedir}/src/main/resources/config.properties</file>
                            </files>
                        </configuration>
                    </execution>
                </executions>
            </plugin>

            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-jar-plugin</artifactId>
                <version>2.4</version>
                <configuration>
                    <finalName>${jar.name}</finalName>
                </configuration>
            </plugin>
        </plugins>
    </build>
</project>

基本上,附加到验证阶段的exec插件将在构建开始时执行,写入config.properties文件(通过echo命令)内容jar.name = from-exec.

然后附加到初始化阶段的属性插件将读取该config.properties文件并加载要用作构建的一部分的属性.

然后,作为示例,jar插件将使用该属性作为其配置的一部分(< finalName> ${jar.name}< / finalName>部分).

运行mvn clean包,您将在目标文件夹中找到from-exec.jar文件.

如果你不能得到一个让git描述为name = value模式的方法,你可以(最坏的情况)有两个Exec Maven Plugin执行,第一个写入文件的属性名和equals字符(即通过一个echo),第二个(git describe)将属性值附加到文件中.

标签:java,maven,pom-xml,maven-3,maven-jar-plugin
来源: https://codeday.me/bug/20190829/1761504.html