2012-10-09 55 views
-1

我瞭解Maven如何在src/java/main中使用.java文件。但是它可能會用於更普遍的情況嗎?讓我們把它更抽象:假設我已經有一些a.exe從目錄A1,A2,A3中讀取一些(不一定只有.java)源,並將一些文件(也許一些生成.java)放到目錄B1,B2 。我也有一些b.exe目前從B1,B2,B3讀取文件並生成其他內容。一些更類似的步驟。 (現實生活中的問題在後面)。Maven真的很靈活嗎?

我想編寫一個POM.xml文件,以便maven能夠完成這項工作。那可能嗎?我假設a.exe和b.exe應該作爲maven插件進行變形。 接下來,在Maven的文檔我看到:

<build> 
    <sourceDirectory>${basedir}/src/main/java</sourceDirectory> 
    <scriptSourceDirectory>${basedir}/src/main/scripts</scriptSourceDirectory> 
    <testSourceDirectory>${basedir}/src/test/java</testSourceDirectory> 
    <outputDirectory>${basedir}/target/classes</outputDirectory> 
    <testOutputDirectory>${basedir}/target/test-classes</testOutputDirectory> 
    ... 
</build> 

讓我困擾的是,「sourceDirectory」看上去本身作爲一個硬編碼名稱。 Maven會接受A1和A2標籤嗎?

回答

1

優於配置(你會考慮接受一些你以前的問題,讓其他人會更願意回答你嗎?)

Maven的應力公約。您可以將sourceDirectory作爲約定之一,我們已經預定義了一些用於(Java)編譯器插件的元素。

你想要做的事情可以實現。您可以自己編寫一個插件/ MOJO,它可以從您想要的任何目錄中讀取並調用任何您想要的外部exe文件。通過在您MOJO有合理的默認值,你可以有你的項目POM樣子像

<project> 
    : 
    : 
    <build> 
    <plugins> 
     <plugin> 
     <groupId>yourPluginGroup</group> 
     <artifactId>generate-A-data</artifactId> 
     <!-- if you want extra configuration, you can have <configuration> elements --> 
     </plugin> 

     <plugin> 
     <groupId>yourPluginGroup</group> 
     <artifactId>generate-B-data</artifactId> 
     </plugin> 
    </plugins> 
    </build> 
<project> 

沒有那麼糟糕吧?

但是,說Maven是否「靈活」還是很值得懷疑的。我相信靈活性永遠不是Maven的目標。 Maven專門爲構建而設計,它定義了不同的框架以供您遵循(例如,構建階段,依賴範圍),您不能像其他基於腳本的工具(如Ant)那樣使Maven「靈活」。

+0

OK。因此,我可能完全忽略「sourceDirectory」。 – Dima

+0

是某種類型的,也許你可能需要'禁用'默認的插件(例如jar和JAR神器類型的編譯器插件) –

+0

也許吧。然而,我當前進程的某些步驟調用了javac,最後一個減號創建了jar。我們將看到。用螞蟻來說,它非常簡單... – Dima

1

答案是:否,MAVEN不靈活。下面是一個簡單的任務,我甚至不能從這個世界的所有行家論壇幫助解決:寫一個POM是

  1. 編譯某些目錄完整的Java的文件
  2. 做別的東西(如果你請 - 執行一個示例Hello World Mojo插件)
  3. 編譯其他一些目錄與其他一些Java文件。

    NO WAY ! 
    
0

您可以做到這一點,而無需編寫插件,通過結合Exec插件和編譯器插件到「產生來源」或「工藝類」階段。構建助手插件也可能用於添加源路徑。

對於原來如此,你可以嘗試以下綁定:

  • 綁定到初始化階段構建輔助性Maven的插件,添加任何必需的源目錄(如B1和B2)
  • EXEC -maven-plugin綁定到生成源階段,有兩個執行,一個用於a.exe,一個用於b。exe

對於Hello World Mojo情況,如果將以下內容添加到進程類階段(按順序),會出現什麼情況?

  • 的Hello World的Mojo插件
  • 建立幫助插件添加源目錄
  • 編譯器插件

唯一的缺點我能看到的是,第一源目錄將被重新編譯。但是編譯器應該足夠聰明,知道沒有任何變化,這是否是一個問題取決於你爲什麼要這樣做。爲什麼在運行Hello World之前需要目錄A中的類文件?也許你真的在看待應該成爲單獨模塊的兩段獨立代碼? OK。