wvd*_*vdz 9 maven-3 maven maven-archetype
我创建了一个Maven Archetype.我META-INF/maven/archetype-metadata.xml看起来像这样:
<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>
</archetype-descriptor>
Run Code Online (Sandbox Code Playgroud)
这是有效的,因为它创建了一个Java源文件夹,并将我的类放在包中,由groupIdand和artifactId.
但是,我想修改他的包名.例如,如果我的groupId com.example和我的artifactId一样wvdz,那么我的包应该是:
com.example.wvdz.mypackage
Run Code Online (Sandbox Code Playgroud)
问题:我如何做到这一点?
A_D*_*teo 17
为了实现您的目标,并且由于您已经在使用该packaged属性true(稍后解释),您只需在下面的路径中添加目录即可.
使用include以下附加元素保持相同的配置:
<fileSets>
<fileSet filtered="true" packaged="true" encoding="UTF-8" >
<directory>src/main/java</directory>
<includes>
<include>**/*.java</include>
</includes>
</fileSet>
</fileSets>
Run Code Online (Sandbox Code Playgroud)
然后,您可以在src/main/java/mypackage您的Java源代码下放置模板,其中package语句如下所示:
package ${package}.mypackage
Run Code Online (Sandbox Code Playgroud)
请注意,它直接.mypackage反映了mypackage文件夹src/main/java.但是,在创建原型时,Maven将作为文件夹(以及包等)放在$ {package}属性值之间,默认情况下为$ {groupId}.
您始终可以传递-Dpackage属性并将其覆盖默认值(the groupId),然后根据上面的模板将其用作包的前缀.
这是因为的packaged设置属性true在fileSet上面的部分.在这种情况下true意味着:添加${package}属性指定的文件夹层次结构.设置它将false导致${package}忽略,如果您真的想要对文件夹结构进行硬编码并且显然将其反映到packageJava代码的语句中,则可以使用它,以保持一致性.
上面的行为记录在官方如何存储原型的元数据?:
原型定义了一个文件集:
- 文件集将获取
archetype-resources/src/main/java与**/*.java模式匹配的所有文件- 将使用Velocity引擎(
filtered=true) 生成所选文件- 这些文件将
src/main/java在生成的项目的目录中生成,与JAR文件中的目录相同,但该package属性前置的目录.
并且:
文件集可以是
packaged,这意味着将在package属性前面的目录结构中生成/复制所选文件.它们可以是非打包的,这意味着将生成/复制所选文件而不进行前置.
相同的细节(关于packaged属性)也可以在官方原型描述模型中找到.
另一种可能的解决方案是使用其他属性或package直接在archetype-metadata.xml文件中定义属性值,如下所示:
<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>
Run Code Online (Sandbox Code Playgroud)
注意新的requiredProperties部分:这里我们设置package属性的默认值,不需要在运行时提供它(但可以覆盖上面的值).
因此,下面的Java源模板src/main/java(不需要其他静态文件夹)就是:
package ${package}
Run Code Online (Sandbox Code Playgroud)
在创建(archetype:generate)期间,Maven将使用com.sample.something.mypackageas package值(在Java源文件中)并packageInPathFormat使用值com/sample/something/mypackage(相同的属性,但以路径格式)填充属性并创建所需的包层次结构,与Java源代码一致代码可能会被放入.
| 归档时间: |
|
| 查看次数: |
6024 次 |
| 最近记录: |