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