2012-03-13 2 views
1

私はmaven-dependency-plugin:build-classpathを使用してクラスパスファイルを作成しています。従来のデプロイメントをサポートするには、通常の依存関係JARに加えて、ビルドしているアーティファクトを含めるためにこのファイルが必要です。Mavenではビルドしているアーティファクトを含むクラスパスファイルを生成するにはどうしたらいいですか?

現在のクラスパス・ファイル:私はしたい

dep1.jar:dep2.jar 

クラスパス・ファイル:

project-I'm-building.jar:dep1.jar:dep2.jar 

私は、その後、アーティファクトのJARにクラスパスを含むファイルを生成するのmaven-antrun-プラグインを使用して検討していますbuild-classpathのオプションを使用して依存関係JARを追加します。しかし、これはうんざりしているようです。より良い方法がありますか?

答えて

1

これが私の作品:

<plugin> 
    <groupId>org.codehaus.gmaven</groupId> 
    <artifactId>gmaven-plugin</artifactId> 
    <executions> 
     <execution> 
      <id>build-classpath-files-for-artifact-and-direct-aspect-dependencies</id> 
      <phase>generate-sources</phase> 
      <goals> 
       <goal>execute</goal> 
      </goals> 
      <configuration> 
       <properties> 
        <outputPath>${path.classpath}</outputPath> 
        <prefix>${prefix.classpath}</prefix> 
       </properties> 
       <source><![CDATA[ 
// Function for keying artifacts (groupId:artifactId) 
def artId(art) {"${art.groupId}:${art.artifactId}".toString()}         

if (project.packaging != "tgz") { 
    log.info "Skipping generation of classpath file(s) as this isn't a tgz project" 
} else { 
    new File(project.properties.outputPath).mkdirs() 

    // Map artifact keys to versions (as resolved by this -dist project) 
    def artVers = project.runtimeArtifacts.collectEntries{[(artId(it)): it.version]} 

    // Get global Maven ProjectBuilder, used for resolving artifacts to projects 
    def builder = session.lookup('org.apache.maven.project.ProjectBuilder'); 

    // Build the classpath files, including both the dependencies plus the project artifact itself 
    (project.dependencyArtifacts.findAll{dep -> dep.type == 'jar' && dep.groupId == project.groupId} + project.artifact).each{art -> 
     def req = session.projectBuildingRequest.setResolveDependencies(true) 
     def depProj = builder.build(art, req).getProject(); 

     // Only include artifacts of type jar, and for which a resolved version exists (this excludes -dist artifacts) 
     def classpath = ([art] + depProj.runtimeArtifacts).findAll{a -> a.type == 'jar' && artVers[artId(a)] != null}.collect{ 
      "${project.properties.prefix}/${it.artifactId}-${artVers[artId(it)]}.jar" 
     }         
     def file = new File(project.properties.outputPath, art.artifactId + ".classpath") 
     log.info "Writing classpath with ${classpath.size} artifact(s) to " + file 
     file.write(classpath.join(":")) 
    } 
}                 
        ]]></source> 
      </configuration> 
     </execution> 
    </executions> 
</plugin> 
関連する問題