2013-04-22 15 views
5

私たちは古い/古いjavascript 1.2.xバージョンを使用しています。私たちは、すべてのソースjarもコピーして、runnigがeclipsifyを再生するときに、すべての第三者のソースを見ることができるようにしたいと思います。これをgradleで行う方法はありますか?gradleを使用してすべてのソースjarをコピーする方法

と私は、それらがキャッシュの場所をダウンロードするのを見て、gradle eclipseを実行したときにダウンロードされたすべてのソースjarsを意味します。我々は、1つのプロジェクトでも私たちのためにeclipsifyを呼び出すgrale eclipseを持っているので、100%はgradleを使うことができます。

おかげで、 ディーン

答えて

5

予想通り、これはその単純ではありません。特定のフォルダに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を使用する理由ソースアーティファクトを解決することはできません。よりエレガントな方法があるかもしれませんが、私はそれを深く見ていません。

ルネ

+0

スクリプトにエラーがあるように見えますが、 'resolvedConfiguration'は' from(..) 'ステートメントで2回綴られています。さらに、このコードは直接依存関係のソースのみをダウンロードしますが、トランジッションのものはダウンロードしません。 – eskatos

+0

@eskatos重複した 'resolvedConfiguration'を削除しました。 – sschuberth

4

ルネの答えは直接の依存関係、すべてのtransitivesの依存関係のないソースの瓶のソースの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/') 
} 

一つは、その後javadocclassifierを変更することでのJavadocの瓶のための非常に同じことを行うことができます:ここでは

は、トリックを行いますタスクです。

関連する問題