簡體   English   中英

Maven2編譯器自定義執行源目錄和目標目錄

[英]Maven2 compiler custom execution source directory and target directory

我想在不同的階段運行maven編譯器插件,並使用不同的sourceDirectories和destinationDirectories,以便可以使用來自src / main / java和src / test / java以外的目錄的代碼。

我認為解決方案看起來如下所示,我將其鏈接到的階段是預集成測試。 但是,testSourceDirectory和testOutputDirectory的屬性似乎沒有以這種方式指定,因為它們位於POM的部分中。

<plugin>
  <groupId>org.apache.maven.plugins</groupId>
  <artifactId>maven-compiler-plugin</artifactId>

  <executions>
    <execution>
      <id>compile mytests</id>
      <goals>
        <goal>testCompile</goal>
      </goals>
      <phase>pre-integration-test</phase>
      <configuration>
        <testSourceDirectory>${basedir}/src/inttest/java</testSourceDirectory>
        <testOutputDirectory>${basedir}/target/inttest-classes</testOutputDirectory>
      </configuration>
    </execution>
  </executions>
</plugin>

有沒有辦法讓這個插件在不同的階段編譯不同的目錄而不影響它的默認操作?

源目錄在<build>元素內的compiler-plugin外部設置,因此這不起作用。

您可以使用build-helper-maven-plugin的add-sourceadd-test-source為集成測試指定其他源目錄,但這不會刪除現有的源目錄。

  <plugin>
    <groupId>org.codehaus.mojo</groupId>
    <artifactId>build-helper-maven-plugin</artifactId>
    <version>1.3</version>
    <executions>
      <execution>
        <id>add-it-source</id>
        <phase>pre-integration-test</phase>
        <goals>
          <goal>add-source</goal>
        </goals>
        <configuration>
          <sources>
            <source>${basedir}/src/inttest/java</source>
          </sources>
        </configuration>
      </execution>
    </executions>
  </plugin>

如果將add-test-source目標綁定到testCompile目標之前運行,則將包含集成測試。 請注意,您希望將它們輸出到目標/測試類,以便surefire插件可以找到它們。

為了處理標准測試源的刪除,我編寫了一個小插件來修改模型以刪除現有的testSource位置,然后再添加用於集成測試的位置。

經過更多的研究后,很明顯這在我想要的方式中在Maven 2中實際上是不可能的,需要某種形式的黑客來引入集成測試。 雖然您可以添加其他目錄(如Rich Seller所建議),但沒有插件可以刪除其他源或單獨編譯主編譯目錄。

我發現添加集成測試的最佳解決方案是首先使用build helper插件添加目錄inttest目錄以編譯為測試。

<plugin>
    <groupId>org.codehaus.mojo</groupId>
    <artifactId>build-helper-maven-plugin</artifactId>
    <executions>
        <execution>
            <id>add-test-source</id>
            <phase>generate-sources</phase>
            <goals>
                <goal>add-test-source</goal>
            </goals>
            <configuration>
                <sources>
                    <source>src/inttest/java</source>
                </sources>
            </configuration>
        </execution>
    </executions>
</plugin>

現在,為了使集成測試在集成測試階段執行,您需要使用排除和包含來操作它們如何運行,如下所示。 這允許您可能需要的任何自定義參數(在我的情況下,通過argline添加代理)。

<plugin>
<groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-surefire-plugin</artifactId>
    <configuration>
    <excludes>
        <exclude>**/itest/**</exclude>
    </excludes>
    </configuration>
<executions>
    <execution>
        <id>inttests</id>
        <goals>
            <goal>test</goal>
        </goals>
        <phase>integration-test</phase>
        <configuration>
            <excludes><exclude>none</exclude></excludes>
            <includes>
                <include>**/itest/**/*Test.java</include>
            </includes>
        </configuration>
    </execution>
</executions>
</plugin>

暫無
暫無

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

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