8

必要なプロパティ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 で使用されません。

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

プロジェクトの他のファイルでは値が正しく置き換えられているため、スペルの問題はないと思います。

私は似たようなものをたくさん見てきましたが、それらはすべて rootArtifactId を使用しており、実際、rootArtifactId (名前の開始部分として) を使用すると、期待どおりに機能します。

同様の問題を見つけることができません。なぜ機能しないのか、または機能させる方法はありますか?

4

4 に答える 4

4

合理的な回避策を見つけました。

rootArtifactIdのみを使用できる唯一の場所はarchetype descriptor<module>要素のようですが、他のすべての場所では問題なくmoduleNameプロパティを使用できます。

私がしたこと:

${moduleName}を使用

  • モジュールの pom の artifactId
  • いくつかのデフォルトの依存関係
  • メイン pom のモジュール定義 (<module>module-${moduleName}</module>)

__ moduleName __を使用 する

  • src/main/java & resources のパッケージ名

アーティファクト記述子

  • module-sample1 & module-sample2 のような修正モジュール名を使用します (もちろん、アーティファクト リソース内のディレクトリにも同じ名前を付けます)。

プロジェクト作成後の修正事項

  1. モジュールのディレクトリ名
  2. module-sample[12] を含むメイン pom のモジュール要素を取り出します。

これらはすべて、プロジェクトの作成後に実行される postcreate-pom.xml に埋め込まれた ant スクリプトにあります。

そして、それはスムーズに機能しました。

誰かに役立つことを願っています。

私の質問を読んでくれてありがとう、トニオ。

于 2012-10-18T15:10:03.147 に答える
3

サブモジュールの 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>
于 2015-03-17T16:29:04.027 に答える
2

Mavenアーキタイプソース(バージョン2.2)の内部を見ると、使用できる唯一の値はDefaultFilesetArchetypeGeneratorから抽出されたrootArtifactIdのようです。

   while (subprojects.hasNext() ) {

        ModuleDescriptor project = subprojects.next();

        File moduleOutputDirectoryFile = new File( outputDirectoryFile
             , StringUtils.replace( project.getDir()
                   , "__rootArtifactId__"
                   , rootArtifactId 
                   ));
        ...........
于 2012-10-11T14:52:09.140 に答える