簡體   English   中英

如何在maven pom.xml上變量化shell腳本輸出來使用

[英]How to variablize shell script output on maven pom.xml to use

我想知道有沒有辦法讓maven執行一個shell腳本來卷曲資源並使響應可用,就像maven可以引用的環境變量或全局變量一樣,還是可以用Groovy來實現?

所以當我做maven構建時我想要執行這個shell腳本。 腳本本身將卷曲到一些資源URI並輸出響應(我們可能必須等待它返回),並且maven或者可能Groovy可以以某種方式獲得卷曲響應並使用它來設置一些配置。

以下是建議的方法:

這種方法的要求:

  • 您期望的卷曲響應(或輸出或您的腳本)應具有name = value格式(即屬性文件)
  • 必須在執行Properties Maven插件之前在POM中聲明Exec Maven插件執行,並且它們必須連接到相同的Maven階段或連接到兩個連續的Maven階段才能提供所需的流程
  • 必須將屬性Maven插件執行附加到Maven的早期階段(初始化或驗證),以使配置可用於其他Maven階段和插件

有關Maven階段的完整列表,請參閱此處的官方文檔

更新 :下面是一個流程示例,剛剛測試並且工作正常(在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文件。

更新 :上面是如何從腳本動態加載一組屬性的示例,然后可以將這些屬性注入Maven構建(因此用作POM配置的一部分)。

但是,如果您需要將此動態配置加載到您的應用程序中,您甚至可以跳過第二步(Propeprties Maven插件)並從代碼中的config.properties文件加載屬性,只要該文件是該文件的一部分即可。應用程序類路徑(如上例所示,放在src/main/resources )。

由於屬性文件的創建發生在早期Maven階段( validateinitialize ),因此test (對於您的測試)和package (對於您的最終人工制品)階段可以根據需要使用它。

在Java中,您將使用java.util.Properties類,在Groovy中,您可以按照此處的說明,從stackoverflow中的另一個問題開始。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM