3

gmavenスクリプトを使用していくつかのことを行う親POMがあります。

   <plugin>
      <groupId>org.codehaus.gmaven</groupId>
      <artifactId>gmaven-plugin</artifactId>
      <version>1.4</version>

      <configuration combine.children="override">
        <providerSelection>2.0</providerSelection>
        <scriptPath>${basedir}/build/groovy</scriptPath>
      </configuration>
      <executions>
        <execution>
          <id>groovy-properties-script</id>
          <phase>validate</phase>
          <goals>
            <goal>execute</goal>
          </goals>
          <configuration>
            <source>computeProperties.groovy</source>
          </configuration>
        </execution>
          <!-- ... -->

すべての子もこのスクリプトを実行することになっていますが、自分のベースに基づいてスクリプトパスを解決しようとします。通常、これはプロパティで必要なものですが、ここでは機能せず、それを回避する方法がわかりません。

4

2 に答える 2

1

set-system-propertiesこれを回避する1つの方法は、の目標を使用することであるように思われproperties-maven-pluginます。

  <plugin>
    <groupId>org.codehaus.mojo</groupId>
    <artifactId>properties-maven-plugin</artifactId>
    <version>1.0-alpha-2</version>
    <inherited>false</inherited>
    <executions>
      <execution>
        <goals>
          <goal>set-system-properties</goal>
        </goals>
        <configuration>
          <properties>
            <property>
              <name>com.binu.core.parent.basedir</name>
              <value>${basedir}</value>
            </property>
          </properties>
        </configuration>
      </execution>
    </executions>
  </plugin>

継承されないため、このプラグインは親pomでのみ実行されます。これはかなりハッキーなようですが、これを達成するためのネイティブのMavenの方法はありますか?

于 2012-07-04T03:14:07.563 に答える
0

この種のことを行う最良の方法は、Groovyスクリプトを独自のjarファイルに入れて、maven-dependency-plugin解凍してもらうことです。次に、スクリプトは解凍されたスクリプトを指すことができます。

この例のように:

directory layout

+- pom.xml
  +- script
  | +- pom.xml
  | +- src
  |   +- main
  |     +- resources
  |       +-computeProperties.groovy
  +- code
    +- pom.xml
    +- src
      +- main
        +- java

pom.xml

<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.stackoverflow</groupId>
    <artifactId>Q11321971</artifactId>
    <version>1.0-SNAPSHOT</version>
    <packaging>pom</packaging>

    <name>${project.artifactId}-${project.version}</name>

    <properties>
    </properties>

    <modules>
        <module>script</module>
        <module>code</module>
    </modules>

    <dependencyManagement>
        <dependencies>
            <!-- Inter-Module dependencies -->
            <dependency>
                <groupId>com.stackoverflow</groupId>
                <artifactId>Q11321971-script</artifactId>
                <version>${project.version}</version>
            </dependency>
        </dependencies>
    </dependencyManagement>

    <build>
        <pluginManagement>
            <plugins>
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-dependency-plugin</artifactId>
                    <version>2.4</version>
                    <executions>
                        <execution>
                            <id>unpack</id>
                            <phase>validate</phase>
                            <goals>
                                <goal>unpack</goal>
                            </goals>
                            <configuration>
                                <artifactItems>
                                    <artifactItem>
                                        <groupId>com.stackoverflow</groupId>
                                        <artifactId>Q11321971-script</artifactId>
                                        <overWrite>false</overWrite>
                                        <outputDirectory>${project.build.directory}/build/groovy</outputDirectory>
                                        <includes>**/*.groovy</includes>
                                    </artifactItem>
                                </artifactItems>
                            </configuration>
                        </execution>
                    </executions>
                </plugin>
            </plugins>
        </pluginManagement>
    </build>
</project>

script/pom.xml

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

    <parent>
        <groupId>com.stackoverflow</groupId>
        <artifactId>Q11321971</artifactId>
        <version>1.0-SNAPSHOT</version>
    </parent>

    <artifactId>Q11321971-script</artifactId>

    <name>${project.artifactId}-${project.version}</name>

</project>

code/pom.xml

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

    <parent>
        <groupId>com.stackoverflow</groupId>
        <artifactId>Q11321971</artifactId>
        <version>1.0-SNAPSHOT</version>
    </parent>

    <artifactId>Q11321971-code</artifactId>

    <name>${project.artifactId}-${project.version}</name>

    <build>
        <plugins>
            <plugin>
                <artifactId>maven-dependency-plugin</artifactId>
            </plugin>
        </plugins>
    </build>
</project>

このトップpomを実行すると、モジュールのtargetディレクトリにプラグインで参照できるようになっていることがわかります。codebuild/groovy/computeProperties.groovy

<build/>これは、これを親のタグに追加することにより、親pomに対してもすべてのモジュールで機能します。

    <build>
        <plugins>
            <plugin>
                <artifactId>maven-dependency-plugin</artifactId>
            </plugin>
        </plugins>
    </build>

これで、親にはtargetディレクトリが含まbuild/groovy/computeProperties.groovyれるようになります。

プラグインでは、を次のように変更できます<scriptPath/>

<scriptPath>${project.build.directory}/build/groovy</scriptPath>

また、maven-dependency-pluginは現在フェーズで実行されているため、後のvalidateフェーズgmaven-pluginで実行する必要があります。それはあなたが望むように作り上げることができるものです。

この方法で行うことの非常に良い点は、誰かが子モジュールをチェックアウトしたいだけの場合、それを実行でき、スクリプトjarがリポジトリからダウンロードされて使用されることです。

相対パスは必要ありません...

于 2012-07-04T08:33:14.263 に答える