9

Playframework がそれらを使用できるように、すべての jar を project/lib にコピーする古い playframework 1.2.x バージョンがあります。すべてのソース jar もコピーして、実行時にサード パーティのソースをすべて表示できるようにしたいと考えています。Gradleでこれを行う方法はありますか?

そして、gradle eclipse を実行したときにダウンロードされたすべてのソース jar がキャッシュの場所をダウンロードするのを見たので、それを意味します。1 つのプロジェクトでも gradle eclipse 呼び出し play eclipsify があるので、100% gradle を使用できます。

ありがとう、ディーン

4

3 に答える 3

7

これは、予想されるほど単純ではありません。次のスニペットは、Java プロジェクトのすべての依存関係 (ランタイム + コンパイル) のソース jar を特定のフォルダーにコピーします。

    task copySourceJars(type:Copy){
        def deps = configurations.runtime.incoming.dependencies.collect{ dependency ->
            dependency.artifact { artifact ->
                    artifact.name = dependency.name
                    artifact.type = 'source'
                    artifact.extension = 'jar'
                    artifact.classifier = 'sources'
                }
            dependency
        }
        from(configurations.detachedConfiguration(deps as Dependency[]).resolvedConfiguration.lenientConfiguration.getFiles(Specs.SATISFIES_ALL))
        into('sourceLibs')
    }

ここで lenientConfiguration を使用する理由は、ソース アーティファクトを解決できない場合に失敗したくないからです。もっとエレガントな方法があるかもしれませんが、私はそれを詳しく調べていません。

それが役に立てば幸い、

レネ

于 2013-04-25T21:51:39.290 に答える
6

Rene answer は、すべての推移的な依存関係のソース jar ではなく、直接的な依存関係のソース jar をダウンロードします。

トリックを実行するタスクは次のとおりです。

task copySourceJars( type: Copy ) {
  def sources = configurations.runtime.resolvedConfiguration.resolvedArtifacts.collect { artifact ->
    project.dependencies.create( [
      group: artifact.moduleVersion.id.group,
      name: artifact.moduleVersion.id.name,
      version: artifact.moduleVersion.id.version,
      classifier: 'sources'
    ] )
  }
  from configurations.detachedConfiguration( sources as Dependency[] )
    .resolvedConfiguration.lenientConfiguration.getFiles( Specs.SATISFIES_ALL )
  into file( 'some-directory/' )
}

classifier次に、を に変更することで、javadocs jar に対してまったく同じことを行うことができますjavadoc

于 2015-07-16T10:26:44.860 に答える