3

maven-war-plugin FAQによると、

クラスを別のプロジェクトに移動できない場合は、次の構成を使用して、webapp に含まれるクラスとリソースを、分類子を使用して "添付" アーティファクトとしてデプロイできます。

<project>
  ...
  <artifactId>mywebapp</artifactId>
  <version>1.0-SNAPSHOT</version>
  ...
  <build>
    <plugins>
      <plugin>
        <artifactId>maven-war-plugin</artifactId>
        <version>2.3</version>
        <configuration>
          <attachClasses>true</attachClasses>
        </configuration>
      </plugin>
    </plugins>
  </build>
  ...
</project>

これにより、 mywebapp-1.0-SNAPSHOT.war と mywebapp-1.0-SNAPSHOT-classes.jar の2 つの成果物がデプロイされます。

mywebapp-1.0-SNAPSHOT-classes.jar の代わりに mywebapp-1.0-SNAPSHOT.jar を取得できる方法はありますか?

更新: :

war と jar の両方を生成したい。pom のアクティブなプロファイルに基づいてパッケージを変更するで説明されているように、プロファイルを適用することでこれを行うことができます。しかし、上記の質問について知りたいです。

4

5 に答える 5

3

短い答え:いいえ、できません。

WarMojo.javaの maven-war-plugin ソース(292 行目) を見ると、maven-war-plugin構成を変更するだけでは要件を満たすことができないことがわかります。

    protected static File getTargetFile( File basedir, String finalName, String classifier, String type )
    {
        if ( classifier == null )
        {
            classifier = "";
        }
        else if ( classifier.trim().length() > 0 && !classifier.startsWith( "-" ) )
        {
            classifier = "-" + classifier;
        }

        return new File( basedir, finalName + classifier + "." + type );
    }

classesClassifierパラメータは"classes"デフォルトで であるため、この動作を変更する機会はありません: will classifiernever be null.

生成後にファイルの名前を変更するか、maven-war-pluginのソース コードを変更してカスタム プラグインとして使用します。

最終的な考慮事項として、null classesClassifierを持つことはお勧めできません: 誤解を招く可能性があります。ただし、プロジェクトの要件はわかりません。

それが役に立てば幸い。

于 2013-07-10T09:49:17.827 に答える
2

pom.xml次のセクションを使用して webapp を構成し<build>、ニーズに合っているかどうかを確認してください。

...
<build>
  <plugins>
    <plugin>
      <artifactId>maven-jar-plugin</artifactId>
      <executions>
        <execution>
          <id>create-jar</id>
          <phase>package</phase>
          <goals>
            <goal>jar</goal>
          </goals>
        </execution>
      </executions>
    </plugin>
    <plugin>
      <groupId>org.codehaus.mojo</groupId>
      <artifactId>build-helper-maven-plugin</artifactId>
      <executions>
        <execution>
          <id>attach-jar</id>
          <phase>package</phase>
          <goals>
            <goal>attach-artifact</goal>
          </goals>
          <configuration>
            <artifacts>
              <artifact>
                <file>${project.build.directory}/${project.build.finalName}.jar</file>
              </artifact>
            </artifacts>
          </configuration>
        </execution>
      </executions>
    </plugin>
  </plugins>
</build>
...

このセクションでは、Maven に を明示的に作成するように要求し、作成された をビルドjarにアタッチして、フェーズが生成されたアーティファクトをローカル リポジトリにコピーできるようにします。jarinstall

于 2013-07-05T20:19:02.903 に答える
2

あなたがしたいことに最も近いアプローチは、使用することです<classesClassifier>

なので

    <project>
  ...
  <artifactId>mywebapp</artifactId>
  <version>1.0-SNAPSHOT</version>
  ...
  <build>
    <plugins>
      <plugin>
        <artifactId>maven-war-plugin</artifactId>
        <version>2.3</version>
        <configuration>
          <attachClasses>true</attachClasses>
          <classesClassifier>someClassifier</classesClassifier>
        </configuration>
      </plugin>
    </plugins>
  </build>
  ...
</project>

ただし、このアプローチは常に分類子をyour_jar-classifier.jar配置し、空のタグまたは空白のタグを作成すると、デフォルトで-classes

一方、archiveClasses代わりに使用すると、戦争の中で(分類子なしで)attachClasses必要なJARが見つかりますが、生成されません。WEB-INF\libWEB-INF\classes

于 2013-07-03T16:53:16.863 に答える