構成に groupId、artifactId、および version を使用する Maven プラグインがあります。
そのアーティファクトをリモート リポジトリからダウンロードして、ファイルをプロジェクトにコピーできるようにしたいと考えています。ただし、アーティファクトをダウンロードする方法がわかりません。
依存関係プラグインを使用して依存関係を解決できることは理解していますが、プラグイン内で実行する必要があります。これどうやってするの?
構成に groupId、artifactId、および version を使用する Maven プラグインがあります。
そのアーティファクトをリモート リポジトリからダウンロードして、ファイルをプロジェクトにコピーできるようにしたいと考えています。ただし、アーティファクトをダウンロードする方法がわかりません。
依存関係プラグインを使用して依存関係を解決できることは理解していますが、プラグイン内で実行する必要があります。これどうやってするの?
プラグインは ArtifactFactory と groupId、artifactId、およびブートストラップするアーティファクトのバージョンを使用して Artifact を作成し、そのアーティファクトを ArtifactResolver に渡して検出/ダウンロードを処理する必要があります。
リゾルバーは、ローカル リポジトリとリモート リポジトリにアクセスする必要があります。幸いなことに、これらはすべて、Mojo で依存関係として宣言し、Plexus に配線させることができる神経叢コンポーネントです。
別の回答で、これを行う方法を示しました。あなたの場合、groupId、artifactId、および version を読み取るために、パラメーターがわずかに異なるカットダウン バージョンが必要です。以下のプラグインでは、さまざまなコンポーネントが神経叢コンポーネントとして宣言され、プロパティは groupId、artifactId、バージョン、およびパッケージ タイプを宣言します。
package name.seller.rich.maven.plugins.bootstrap;
import java.util.List;
import org.apache.maven.artifact.Artifact;
import org.apache.maven.artifact.factory.ArtifactFactory;
import org.apache.maven.artifact.repository.ArtifactRepository;
import org.apache.maven.artifact.resolver.ArtifactNotFoundException;
import org.apache.maven.artifact.resolver.ArtifactResolutionException;
import org.apache.maven.artifact.resolver.ArtifactResolver;
import org.apache.maven.plugin.AbstractMojo;
import org.apache.maven.plugin.MojoExecutionException;
import org.apache.maven.plugin.MojoFailureException;
/**
* Obtain the artifact defined by the groupId, artifactId, and version
* from the remote repository.
*
* @goal bootstrap
*/
public class BootstrapAppMojo extends AbstractMojo {
/**
* Used to look up Artifacts in the remote repository.
*
* @parameter expression=
* "${component.org.apache.maven.artifact.factory.ArtifactFactory}"
* @required
* @readonly
*/
protected ArtifactFactory factory;
/**
* Used to look up Artifacts in the remote repository.
*
* @parameter expression=
* "${component.org.apache.maven.artifact.resolver.ArtifactResolver}"
* @required
* @readonly
*/
protected ArtifactResolver artifactResolver;
/**
* List of Remote Repositories used by the resolver
*
* @parameter expression="${project.remoteArtifactRepositories}"
* @readonly
* @required
*/
protected List remoteRepositories;
/**
* Location of the local repository.
*
* @parameter expression="${localRepository}"
* @readonly
* @required
*/
protected ArtifactRepository localRepository;
/**
* The target pom's artifactId
*
* @parameter expression="${bootstrapArtifactId}"
* @required
*/
private String bootstrapArtifactId;
/**
* The target pom's groupId
*
* @parameter expression="${bootstrapGroupId}"
* @required
*/
private String bootstrapGroupId;
/**
* The target pom's type
*
* @parameter expression="${bootstrapType}"
* @required
*/
private String bootstrapType;
/**
* The target pom's version
*
* @parameter expression="${bootstrapVersion}"
* @required
*/
private String bootstrapVersion;
public void execute() throws MojoExecutionException, MojoFailureException {
try {
Artifact pomArtifact = this.factory.createArtifact(
bootstrapGroupId, bootstrapArtifactId, bootstrapVersion,
"", bootstrapType);
artifactResolver.resolve(pomArtifact, this.remoteRepositories,
this.localRepository);
} catch (ArtifactResolutionException e) {
getLog().error("can't resolve parent pom", e);
} catch (ArtifactNotFoundException e) {
getLog().error("can't resolve parent pom", e);
}
}
}
これは、プラグインを使用するように構成された pom の例です (そして、aspectjrt 1.6.4 pom をダウンロードします)。
<?xml version="1.0" encoding="UTF-8"?>
<project>
<modelVersion>4.0.0</modelVersion>
<groupId>name.seller.rich</groupId>
<artifactId>bootstrap-test</artifactId>
<version>1.0.0</version>
<build>
<plugins>
<plugin>
<groupId>name.seller.rich</groupId>
<artifactId>maven-bootstrap-plugin</artifactId>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>bootstrap</goal>
</goals>
<configuration>
<bootstrapGroupId>org.aspectj</bootstrapGroupId>
<bootstrapArtifactId>aspectjrt</bootstrapArtifactId>
<bootstrapVersion>1.6.4</bootstrapVersion>
<bootstrapType>pom</bootstrapType>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
</project>