作ってみた.
$ cat DependenciesCopyMojo.java
package jp.cafebabe.maven.plugins.dependencies;
/**
@goal copy
@requiresDependencyResolution runtime
*/
public class DependenciesCopyMojo extends AbstractDependenciesMojo{
/**
The maven project.
@parameter expression="${project}"
@required
@readonly
*/
private MavenProject project;
/**
The directory containing generated classes.
@parameter expression="${project.build.directory}"
@required
*/
private File outputDirectory;
public void execute() throws MojoExecutionException{
if(!outputDirectory.exists()){
outputDirectory.mkdirs();
}
List<Artifact> artifacts = project.getRuntimeArtifacts();
getLog().info("copying dependencies...");
try{
for(Artifact artifact: artifacts){
FileUtils.copyFileToDirectory(artifact.getFile(), outputDirectory);
}
} catch(IOException e){
throw new MojoExecutionException("copy failed", e);
}
}
}
フィールドがどこで初期化されているのか全くわかりません.
ソースコード中に明示的に初期化していないのに,そして,private なのに,実行時にはなぜか初期化されています.
そして,
@requiresDependencyResolution runtime
の一行がなくて,2 時間ほど悩んでた.この一行がないと,runtime dependencies が取ってこれないみたいだ.
で,作り終わった後に,プロジェクトが依存する全てのjarを集めるには という記事見つける.orz