7

マルチモジュールプロジェクトがあります。子の内部では、いくつかの複雑なことを行う必要があります (アプリケーション サーバーへのデプロイとの統合テストなど)。したがって、統合テストの子があり、このモジュールから他のモジュールに到達するには、親のルートが必要です。「..」は使いたくない。integrationtest POM には次のプロパティがあります。

<properties>
 <main.basedir>${project.parent.basedir}</main.basedir>
    ...
</properties>

また、次の内容の antrun プラグインがあります。

<plugins>
 <plugin>
  <artifactId>maven-antrun-plugin</artifactId>
  <executions>
   <execution>
    <id>render-parameter-sql</id>
    <phase>validate</phase>
    <goals>
     <goal>run</goal>
    </goals>
    <configuration>
     <tasks>
      <echoproperties/>
     </tasks>
    </configuration>
   </execution>
  </executions>
 </plugin>
</plugins>

出力では、main.basedir は解決されていません。

main:
[echoproperties] #Ant properties
[echoproperties] #Thu Oct 28 09:32:13 CEST 2010
[echoproperties] ant.core.lib=C\:\\Users\\gaborl\\.m2\\repository\\org\\apache\\ant\\ant\\1.8.1\\ant-1.8.1.jar
...
[echoproperties] main.basedir=${project.parent.basedir}
[echoproperties] maven.dependency.antlr.antlr.jar.path=C\:\\Users\\gaborl\\.m2\\repository\\antlr\\antlr\\2.7.6\\antlr-2.7.6.jar

本当に腹が立ったので、これを回避する方法をあなたに尋ねることにしました...

4

1 に答える 1

11

がAntRunから「利用可能」でない理由は正確にはわかりません。おそらく、サポートされていないだけです( http://jira.codehaus.org/browse/MNG-3597を参照)。${project.parent.basedir}

gmavenを使用した恐ろしい回避策は次のとおりです。

<plugin>
  <groupId>org.codehaus.gmaven</groupId>
  <artifactId>gmaven-plugin</artifactId>
  <version>1.3</version>
  <executions>
    <execution>
      <id>set-custom-property</id>
      <phase>validate</phase>
      <goals>
        <goal>execute</goal>
      </goals>
      <configuration>
        <source>
          project.properties.setProperty('main.basedir', project.parent.basedir.toString())
        </source>
      </configuration>
    </execution>
  </executions>
</plugin>
<plugin>
  <artifactId>maven-antrun-plugin</artifactId>
  <version>1.6</version>
  <executions>
    <execution>
      <id>render-parameter-sql</id>
      <phase>validate</phase>
      <goals>
        <goal>run</goal>
      </goals>
      <configuration>
        <target>
          <echo>project.artifactId        : ${project.artifactId}</echo>
          <echo>project.parent.basedir    : ${project.parent.basedir}</echo>
          <echo>main.basedir              : ${main.basedir}</echo>
          <echo>project.basedir           : ${project.basedir}</echo>
          <echo>project.build.directory   : ${project.build.directory}</echo>
        </target>
      </configuration>
    </execution>
  </executions>
</plugin>

私はそれを誇りに思っていませんが、それはちょっと「機能します」(親basedirへのパスの文字列表現があなたにとって大丈夫なら):

$mvn検証
[情報]プロジェクトをスキャンしています...
..。
[情報]---maven-antrun-plugin:1.6:run(render-parameter-sql)@ Q4040778 ---
[情報]タスクの実行

主要:
     [エコー]project.artifactId:Q4040778
     [エコー]project.parent.basedir:$ {project.parent.basedir}
     [エコー]main.basedir:/ home / pascal / Projects / stackoverflow
     [エコー]project.basedir:/ home / pascal / Projects / stackoverflow / Q4040778
     [エコー]project.build.directory:/ home / pastal / Projects / stackoverflow / Q4040778 / target
[INFO]実行されたタスク
..。

しかし、私はあなたがしたいこと(このモジュールから他のモジュールに到達するために親のルートが必要です)は悪い習慣であると言う必要があります、モジュールは自己完結型であり、緊密に結合されるべきではありません。

私が投稿したものを使用することはお勧めしません:)

于 2010-10-28T22:58:59.033 に答える