爲了實現您的目標,並且您已經在使用packaged
屬性true
(稍後解釋),您可以簡單地將目錄添加到下面的路徑中。
保持相同的配置,另外還有include
元素如下:
<fileSets>
<fileSet filtered="true" packaged="true" encoding="UTF-8" >
<directory>src/main/java</directory>
<includes>
<include>**/*.java</include>
</includes>
</fileSet>
</fileSets>
然後,您可以將src/main/java/mypackage
下Java源代碼模板所在的包語句應該如下:
package ${package}.mypackage
注意.mypackage
正好反映src/main/java
下的mypackage
文件夾。但是,在創建原型時,Maven將作爲一個文件夾(和一個包)一樣放置在$ {package}屬性值之間,默認情況下它是$ {groupId}。
您可以隨時通過-Dpackage
屬性並將其覆蓋爲默認值(groupId
),然後根據上述模板將其用作包的前綴。
發生這種情況的原因是上述fileSet
部分中的packaged
屬性設置爲true
。在這種情況下,true
意味着:添加由${package}
屬性指定的文件夾層次結構。將其設置爲false
將導致${package}
被忽略,如果您確實想要對文件夾結構進行硬編碼並顯然將其反映到Java代碼的package
語句中,則可以使用它以保持一致性。
行爲上面記錄在官方How is metadata about an archetype stored?:
原型定義了一個單一的文件集:
- 的文件集將採取一切文件
archetype-resources/src/main/java
匹配**/*.java
圖案
- 選定的文件將使用Velocity引擎生成(
filtered=true
)
- 這些文件將在生成的項目的
src/main/java
目錄中生成,該目錄與JAR文件所在的目錄相同,但是該目錄由package
屬性預置。
並且:
文件集可以是packaged
,這意味着將要生成的選擇的文件/在由包前綴屬性的目錄結構複製。它們可以是非打包的,這意味着所選文件將被生成/複製,而無需預先考慮。
在官方Archetype Descriptor Model中也可以找到相同的細節(約packaged
屬性)。
另一種可能的解決方案是使用一個額外的屬性或直接在archetype-metadata.xml
文件定義package
屬性值如下:
<archetype-descriptor
xmlns="http://maven.apache.org/plugins/maven-archetype-plugin/archetype-descriptor/1.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/plugins/maven-archetype-plugin/archetype-descriptor/1.0.0 http://maven.apache.org/xsd/archetype-descriptor-1.0.0.xsd">
<fileSets>
<fileSet filtered="true" packaged="true" encoding="UTF-8">
<directory>src/main/java</directory>
</fileSet>
</fileSets>
<requiredProperties>
<requiredProperty key="package">
<defaultValue>${groupId}.${artifactId}.mypackage</defaultValue>
</requiredProperty>
</requiredProperties>
</archetype-descriptor>
注意新requiredProperties
節:在這裏我們設置的默認值對於package
屬性,不需要在運行時提供它(但可以覆蓋上面的值)。
因此,src/main/java
下的Java源代碼模板(無需進一步靜態文件夾),簡直是:
package ${package}
在創建(archetype:generate
),那麼Maven會使用com.sample.something.mypackage
作爲包值(在Java源文件),並使用值com/sample/something/mypackage
(相同的屬性,但路徑格式)填充packageInPathFormat
屬性,並創建期望的包層次結構,與Java源代碼預期放置的內容一致。
[ Maven - 創建一個rchetypes](https://maven.apache.org/guides/mini/guide-creating-archetypes.html)使用mvn archetype:generate? – abarisone
也看看http://stackoverflow.com/questions/20403157/package-names-in-project-generated-from-maven-archetype – abarisone