更改 Maven Archetype 中的包属性

2024-02-18

我创建了一个 Maven 原型。我的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>

这是有效的,因为它创建了一个 Java 源文件夹并将我的类放入由groupIdartifactId.

不过我想修改他的包名。例如,如果我的 groupId 是com.example和我的artifactIdwvdz,那么我的包应该是:

com.example.wvdz.mypackage

Question: 我该如何实现这个目标?


为了实现您的目标并且由于您已经在使用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准确地反映了mypackage直接下的文件夹src/main/java。但是,在创建原型时,Maven 将作为文件夹(以及包)放置在 ${package} 属性值之间,默认情况下为 ${groupId}。

您随时可以通过-Dpackage属性并覆盖它的默认值(groupId),然后将根据上面的模板用作包的前缀。

发生这种情况的原因是packaged属性设置为true in the fileSet上面的部分。在这种情况下true意思是:向其中添加由指定的文件夹层次结构${package}财产。将其设置为false会导致${package}忽略,如果您确实想对文件夹结构进行硬编码并明显地将其反映到package声明您的 Java 代码,以保持一致性。


上述行为在官方文档中有记录有关原型的元数据是如何存储的? http://maven.apache.org/archetype/maven-archetype-plugin/specification/archetype-metadata.html:

原型定义了一个文件集:

  • 文件集将包含所有文件archetype-resources/src/main/java匹配的**/*.java pattern
  • 所选文件将使用 Velocity 引擎生成(filtered=true)
  • 文件将生成在src/main/java生成的项目的目录与 JAR 文件中的目录位于同一目录中,但该目录前面带有package财产。

并且:

文件集可以是packaged,这意味着所选文件将在包属性前面的目录结构中生成/复制。它们可以是非打包的,这意味着将在没有前缀的情况下生成/复制所选文件。

相同的细节(关于packaged属性)也可以在官方找到原型描述模型 http://maven.apache.org/archetype/archetype-models/archetype-descriptor/archetype-descriptor.html.


另一种可能的解决方案是使用附加属性或定义您的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>

注意新的requiredProperties部分:这里我们设置默认值package属性,不再需要在运行时提供它(但可以覆盖上面的值)。

因此,下面的 Java 源模板src/main/java(不需要进一步的静态文件夹)就是:

package ${package}

在创作过程中(archetype:generate) 然后 Maven 将使用com.sample.something.mypackage作为包值(在 Java 源文件中)并填充packageInPathFormat具有价值的财产com/sample/something/mypackage(相同的属性,但采用路径格式)并创建所需的包层次结构,与 Java 源代码期望放置的内容一致。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

更改 Maven Archetype 中的包属性 的相关文章

随机推荐