2

次のタスクを作成しました。これは、各サブプロジェクトのすべてのコンパイル依存関係を抽出し、サブプロジェクトごとのディレクトリに配置します。

task exportCompileLibs << {
  subprojects.each { iSubProject ->
    iSubProject.configurations.findAll{it.name == "compile"}.each{ jConfig ->
      println "copying compile libs for ${iSubProject.name}..."
      copy {
        into "${iSubProject.buildDir}/gradle-lib-export"
        from jConfig
        eachFile {println it.name}
      }
    }
  }
}

これを拡張して、Gradle が既に知っているソース アーティファクトもエクスポートしたいと思います (キャッシュ ディレクトリにソース jar が表示されます)。オブジェクト モデルを使用してハンドルを取得する方法がわかりません。彼ら。

IDEA および Eclipse プラグインはこれを実行できるようです (ビルドするプロジェクト ファイルを直接 gradle キャッシュに指定します) が、その方法がわかりません。IDE プラグインのソース コードを見ると、次のように見えます。 ...トリッキー。Gradle DSL または API に欠けている明らかな何かがあることを願っています。

誰でもアイデアはありますか?

4

2 に答える 2

1

これに対する少なくとも暫定的な解決策を探している人にとって、以下は私が現時点で望んでいることをほぼ正確に行っているようです。

依存関係をエクスポートする各プロジェクトの build.gradle ファイルに IDEA プラグインを適用する必要があります。

プラグインを適用: 「アイデア」

次に、このタスクを定義します。

task exportDependencies << {
  def deps = project.extensions.getByType(IdeaModel).module.resolveDependencies()
  copy {
    from deps*.classes.file
    into "${buildDir}/gradle-lib-export/libs"
  }

  copy {
    from deps*.sources.file
    into "${buildDir}/gradle-lib-export/sources"
  }
}

そして、ここに私の恐ろしいハックがあるので、各サブプロジェクトにプラグインを適用する必要はありません:

task exportDependencies(description: "export project dependency jars") << {
  subprojects.each { Project iSubProject ->
    String target = "${iSubProject.buildDir}/gradle-lib-export"

    IdeaPlugin ideaPlugin = new IdeaPlugin()
    ideaPlugin.apply(iSubProject)
    Set<Dependency> deps = ideaPlugin.model.module.resolveDependencies()

    println "exporting dependencies for $iSubProject.name into $target"
    copy {
      from deps*.classes.file
      into "${target}/libs"
      eachFile { println "lib -> $it.name" }
    }
    copy {
      from deps*.sources.file
      into "${target}/sources"
      eachFile{ println "source -> $it.name" }
    }
  }
}

ビルド タスク リストに不要なものを詰め込まないことで +10 ポイント、 - ewwww で数百万ポイント

于 2012-09-11T11:50:43.103 に答える
0

現在、IDE プラグインが行っている方法よりも簡単な方法はありません。これは将来変更されることを願っています。

于 2012-09-09T12:20:31.997 に答える