Maven原型不使用属性来创建模块名称

时间:2012-10-10 23:28:03

标签: maven maven-archetype

我创建了一个原型,您可以在其中设置moduleName(或期望) 一个必需的属性moduleName,这里是原型元数据xml(简化,我也尝试过类似的结果)

<?xml version="1.0" encoding="UTF-8"?>
<archetype-descriptor name="modules-archetype">

  <requiredProperties>
    <requiredProperty key="moduleName">
    </requiredProperty>
  </requiredProperties>

  <modules>
    <module id="modules-${moduleName}-api" 
            dir="modules-__moduleName__-api" 
            name="modules-${moduleName}-api">
      <fileSets>
        <fileSet encoding="UTF-8">
          <directory>src/main/java</directory>
        </fileSet>
      </fileSets>
    </module>
  </modules>

</archetype-descriptor>

安装并生成后,未使用moduleName值 目录名称或artifactid,resuting值是

For the directory:        project/module-__moduleName__-api
For the pom/artifactId:   module-${moduleName}-api

在项目的其他一些文件中正确替换该值,因此 我猜没有拼写问题。

我见过很多类似的东西,但是所有这些东西都使用了rootArtifactId,事实上 如果我使用rootArtifactId(作为名称的起始部分),它按预期工作。

无法找到类似的问题,不知道为什么它不起作用,或者如何让它起作用?

4 个答案:

答案 0 :(得分:4)

我找到了一个合理的解决方法。

似乎唯一只能使用 rootArtifactId 的地方 原型描述符中的 <module> 元素,但在其他所有元素中 您可以毫不费力地使用 moduleName 属性。

我做了什么:

中使用 $ {moduleName}
  • artifactId in module's pom
  • 一些默认依赖项
  • 主pom中的模块定义 (<module>module-${moduleName}</module>)

中使用 __ moduleName __
  • src / main / java&amp;中的包名资源

工件描述符

  • 使用类似的修复模块名称 module-sample1&amp;模块SAMPLE2 (当然,也可以在里面命名目录 工件资源的方式相同)。
创建项目后

需要修复的内容

  1. 模块的目录名称
  2. 取出主pom中的模块元素 包含module-sample [12]
  3. 所有这些都嵌入在postcreate-pom.xml中的ant脚本中 在项目创建后运行。

    它运作顺利。

    希望它对某人有用。

    感谢每个人花时间阅读我的 问题,tonio。

答案 1 :(得分:2)

查看maven-archetype源代码(版本2.2),似乎唯一可能使用的值是从DefaultFilesetArchetypeGenerator中提取的rootArtifactId

   while (subprojects.hasNext() ) {

        ModuleDescriptor project = subprojects.next();

        File moduleOutputDirectoryFile = new File( outputDirectoryFile
             , StringUtils.replace( project.getDir()
                   , "__rootArtifactId__"
                   , rootArtifactId 
                   ));
        ...........

答案 2 :(得分:1)

从项目生成原型后,编辑文件target\generated-sources\archetype\src\main\resources\META-INF\maven\archetype-metadata.xml

添加

    <fileSet filtered="true" packaged="true" encoding="UTF-8">
      <directory></directory>
      <includes>
        <include>pom.xml</include>
      </includes>
    </fileSet>

这将使它过滤你的pom文件!然后再次运行mvn install

答案 3 :(得分:1)

archetype-metadata.xml和子模块的pom.xml:

<?xml version="1.0" encoding="UTF-8"?>
<archetype-descriptor name="multi-module">

  <modules>
    <module name="${rootArtifactId}-ria" id="${rootArtifactId}-ria" dir="__rootArtifactId__-ria">
      <fileSets>
        <fileSet filtered="true" packaged="true">
          <directory>src/main/java</directory>
          <includes>
            <include>**/*.java</include>
          </includes>
        </fileSet>
        <fileSet filtered="true" packaged="true">
            <include>pom.xml</include>
        </fileSet>
      </fileSets>
    </module>
  </modules>


</archetype-descriptor>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>

  <parent>
    <groupId>${groupId}</groupId>
    <artifactId>${rootArtifactId}</artifactId>
    <version>${version}</version>
  </parent>

  <artifactId>${artifactId}</artifactId>
  <packaging>war</packaging>

</project>