2013-06-12 34 views
1

我想知道哪個maven插件負責創建目錄/target或任何配置在pom中。如何更改Maven目標目錄的創建方式?

由於某些原因,我想改變這個文件夾的創建方式(鏈接而不是目錄)。

另一個選項是在創建目標文件夾之前運行我自己的插件,但我不知道如何確保我將成爲第一個。

任何想法?

+0

您想要實現什麼?從目標文件夾鏈接聽起來有點奇怪? – khmarbaise

+0

我想創建一個指向我的虛擬硬盤的目標文件夾 – poussma

回答

3

如果你想將你的build目錄指向ramdisk,我建議你不要鏈接到它,而是使用指向那裏的屬性,例如,

<properties> 
    <custom.build.directory>/path/to/ram/disk/${project.groupId}/${project.artifactId}</custom.build.directory> 
</properties> 
<build> 
    <directory>${custom.build.directory}</directory> 
    ... 
</build> 

我建議,您寧願將此指令放入僅在您的系統上激活的自定義配置文件中。

+0

這是一種標準方式,但不幸的是它可能有缺點。從Maven調用的一些寫得很差的構建腳本,例如ant-run,enunciate等,可能預計目標文件夾接近'src'目錄。 另一個原因是,您的一些IDE運行配置可能會期望二進制文件處於目標狀態。 另外,離開您的消息來源可能會感到不舒服。 – stokito

0

請參閱DefaultMavenResourcesFiltering類。 據我瞭解,如果需要,它會從任何生命週期動態創建target。 所以你不能預測創建的確切時間outputDirectory

但是根據Lifecycle Reference「初始化構建狀態,例如設置屬性或創建目錄」。 - 它應該在這個階段創建。在我看來這是一個錯誤,應該報告。

您可以嘗試建立以exec或antrun插件的任何文件夾:

   <plugin> 
        <groupId>org.apache.maven.plugins</groupId> 
        <artifactId>maven-antrun-plugin</artifactId> 
        <version>1.3</version> 
        <executions> 
         <execution> 
          <id>createInMemoryTarget</id> 
          <phase>initialize</phase> 
          <configuration> 
           <tasks> 
            <mkdir dir="M:/${project.groupId}/${project.artifactId}/${project.version}"/> 
           </tasks> 
          </configuration> 
          <goals> 
           <goal>run</goal> 
          </goals> 
         </execution> 
        </executions> 
       </plugin> 

哪裏M:是你的ramdisk。 然後你就可以用junction plugin安裝在:

   <plugin> 
        <groupId>com.pyx4j</groupId> 
        <artifactId>maven-junction-plugin</artifactId> 
        <version>1.0.3</version> 
        <executions> 
         <execution> 
          <id>symlinkTargetToInMemory</id> 
          <phase>initialize</phase> 
          <goals> 
           <goal>link</goal> 
          </goals> 
         </execution> 
        </executions> 
        <configuration> 
         <links> 
          <!-- link the target folder to appropriate in-memory to directory --> 
          <link> 
           <src>M:/${project.groupId}/${project.artifactId}/${project.version}</src> 
           <dst>${project.build.directory}</dst> 
          </link> 
         </links> 
        </configuration> 
       </plugin> 

然後你可以將這個配置兩個插件的個人資料,如果需要激活它。