为了实现您的目标,并且您已经在使用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