Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/maven/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Maven原型不使用属性创建模块名称_Maven_Maven Archetype - Fatal编程技术网

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

Maven原型不使用属性创建模块名称,maven,maven-archetype,Maven,Maven Archetype,我创建了一个原型,您可以在其中使用 一个必需的属性moduleName,这里是原型元数据xml(reduced,我也尝试了类似的结果) 该值在项目的其他一些文件上被正确替换,因此 我想没有拼写问题吧 我见过很多类似的东西,但它们都使用rootArtifactId,事实上 如果我使用rootArtifactId(作为名称的起始部分),它将按预期工作 找不到类似的问题,知道它为什么不工作,或者如何工作吗?查看maven原型源代码(版本2.2),似乎唯一可能使用的值是从DefaultFileSetac

我创建了一个原型,您可以在其中使用 一个必需的属性moduleName,这里是原型元数据xml(reduced,我也尝试了类似的结果)

该值在项目的其他一些文件上被正确替换,因此 我想没有拼写问题吧

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


找不到类似的问题,知道它为什么不工作,或者如何工作吗?

查看maven原型源代码(版本2.2),似乎唯一可能使用的值是从DefaultFileSetacheTypeGenerator提取的rootArtifactId

while(subprojects.hasNext()){
ModuleDescriptor项目=子项目。下一步();
File moduleOutputDirectoryFile=新文件(outputDirectoryFile
,StringUtils.replace(project.getDir()
,“\uuuu rootArtifactId\uuuuuuuuu”
,rootartiactid
));
...........

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

似乎唯一可以使用rootArtActID的地方是
元素在原型描述符中,但在每个 您可以使用moduleName属性而不会遇到任何问题

我所做的:

在中使用${moduleName}

  • 模块pom中的artifactId
  • 一些默认依赖项
  • 主pom中的模块定义
    (模块-${moduleName})
  • 等等
在中使用模块名称

  • src/main/java和resources中的包名称
工件描述符中

  • 使用修复模块名称,如 模块-sample1和模块-sample2 (当然,还要命名其中的目录。) 工件资源(以相同的方式)
项目创建后要解决的问题

  • 模块的目录名
  • 取出主pom中的模块元件 包含模块示例[12]
  • 所有这些都在一个嵌入postreate-pom.xml的ant脚本中实现 在项目创建后运行

    而且工作顺利

    希望对某人有用

    感谢所有花时间阅读我的文章的人
    问题,tonio。

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

    
    pom.xml
    

    这将使其过滤您的pom文件!然后再次运行
    mvn安装。

    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>
    
    
    src/main/java
    **/*.爪哇
    pom.xml
    
    
    4.0.0
    ${groupId}
    ${rootArtifactId}
    ${version}
    ${artifactId}
    战争
    
    请看没有太多说明问题的bug,但至少问题已经出现了。我也有同样的问题。你说的“postreate pom.xml”是什么意思?在项目创建结束时有没有标准的方法来执行一些创建后操作?我没有找到这样做的方法,我只是创建postreate-pom.xml作为项目a的一部分然后运行它来完成项目设置。正确的方法是@sgpalit的方法(尽管不是直接的方法)。我遇到的问题是我试图使用${artifactId}在一个config.yml文件中,它不起作用。进入archetype-metadata.xml并包含/*.yml是有效的。谢谢你救了我一天!谢谢你,尽管这是一个正确的答案,但值得详细说明。在archetype资源中显示目录结构,至少因为它不是直接的
    For the directory:        project/module-__moduleName__-api
    For the pom/artifactId:   module-${moduleName}-api
    
        <fileSet filtered="true" packaged="true" encoding="UTF-8">
          <directory></directory>
          <includes>
            <include>pom.xml</include>
          </includes>
        </fileSet>
    
    <?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>