5

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

我知道如何通过 ant 属性变量的<exec>任务在ant 中做到这outputproperty一点,但我对 Maven 的经验很少,甚至不知道去哪里找。

这可能吗?


我在示例 pom.xml 文件中发现了这一点,因此向清单中添加一些内容看起来很容易:

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

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

4

2 回答 2

5

这是一个建议的方法:

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

下面是一个流程示例,刚刚经过测试并且可以完美运行(在 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>

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

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

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

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

如果您无法获得git describeas name=value 模式的结果,您可以(最坏的情况)执行两次 Exec Maven 插件,第一次将属性名称和等号字符写入文件(即通过回显),第二个 ( git describe) 将属性值附加到文件中。

于 2015-12-11T21:38:46.513 回答
1

这里有一个 Maven 插件https://github.com/ktoso/maven-git-commit-id-plugin可以做你想做的事。

如果你挂钩到你的构建,它将生成一个名为 ${git.commit.id.describe} 的 Maven 变量,然后你可以使用 Maven 的资源过滤来动态修改你的清单。

于 2015-12-11T21:44:58.727 回答