私は、アーキタイプの元となったプロジェクトへの依存関係を含むプロジェクト スケルトンを生成する Maven アーキタイプを作成しています。
たとえば、元のプロジェクトは次のようになります。
origin/archetype/... archetype for generating project
/core/... core services
/extra/... extra services
そして、アーキタイプは次のような依存関係を含む POM を持つプロジェクトを生成します。
<dependencies>
<dependency>
<groupId>com.foo</groupId>
<artifactId>origin-core</artifactId>
<version>SOMEVERSION</code>
</dependency>
</dependencies>
SOMEVERSION を、アーキタイプがビルドされ、リポジトリにインストールされた時点の元のプロジェクトのバージョンにしたいと思います。
したがって、元のプロジェクトのバージョンが 1.0-SNAPSHOT で である場合mvn install
、アーキタイプが への依存関係を生成するようにしますorigin-core 1.0-SNAPSHOT
。また、元のプロジェクトがリリースされ、自動的にバージョン 1.0 にアップグレードされたら、アーキタイプが への依存関係を生成するようにしますorigin-core 1.0
。
基本的には、アーキタイプ POM で Velocity 変数として使用したいのです${archetypeVersion}
が、それは不可能のようです。
ここで私がやろうとしていることを達成する他の方法はありますか?
ベストアンサー1
数日前、Maven メーリング リストで上記の質問をしたところ、混乱が生じました。幸い、最終的には自分で解決できました。これを実現するための少なくとも 1 つの合理的な方法は次のとおりです。
アーキタイプをビルドするときに、ファイルに Maven フィルタリングを使用してsrc/main/resources/archetype-resources/pom.xml
、現在のプロジェクト バージョンを置き換えます。
やり方は次のとおりです:
ファイルを変更して、ファイルarchetype/pom.xml
のみのフィルタリングを有効にしarchetype-resources/pom.xml
、他の部分ではフィルタリングしないようにします (アーキタイプ ファイルには当然、 が${variable}
随所に含まれますが、ビルド時にそれらを置換するのではなく、アーキタイプの作成時に置換するためです)。
<resources>
<resource>
<directory>src/main/resources</directory>
<filtering>true</filtering>
<includes>
<include>archetype-resources/pom.xml</include>
</includes>
</resource>
<resource>
<directory>src/main/resources</directory>
<filtering>false</filtering>
<excludes>
<exclude>archetype-resources/pom.xml</exclude>
</excludes>
</resource>
</resources>
フィルタリング時に使用するエスケープ文字を有効にして、アーキタイプ POM 内のそのまま残しておく必要のあるすべての変数をエスケープし、アーキタイプの生成時に置換できるようにします。
<pluginManagement>
<plugins>
...
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-resources-plugin</artifactId>
<version>2.5</version>
<configuration>
<escapeString>\</escapeString>
</configuration>
</plugin>
</plugins>
</pluginManagement>
(上記の<resources>
および要素は、POM の 要素内に配置する必要があることに注意してください。)<pluginManagement>
<build>
アーキタイプ プロジェクトのバージョンを挿入するアーキタイプ pom で使用し${project.version}
、アーキタイプ生成時まで置換されないままにしておく必要がある他のすべての変数をエスケープします。
<?xml version="1.0" encoding="UTF-8"?>
<project ...>
<modelVersion>4.0.0</modelVersion>
<groupId>\${groupId}</groupId>
<artifactId>\${artifactId}</artifactId>
<version>\${version}</version>
<packaging>jar</packaging>
<dependencies>
<dependency>
<groupId>com.foo</groupId>
<artifactId>origin-core</artifactId>
<version>${project.version}</version>
</dependency>
</dependencies>
</project>