如何复制的gradle使用的所有源罐子(how to copy all source jars us

2019-08-31 19:19发布

我们有我们复制所有的罐子项目/ lib以使playframework可以消耗他们的老playframework 1.2.x的版本。 我们很乐意所有源罐子复制以及使运行过程中出现打eclipsify的时候,我们可以查看所有的第三方来源。 有没有办法用gradle这个做到这一点?

我的意思是,当我跑gradle这个日食,因为我看到他们下载的缓存位置已下载的所有源罐子。 我们有日食的gradle呼吁发挥eclipsify为我们的一个项目,以及这样我们就可以100%只使用gradle这个。

感谢,迪安

Answer 1:

这并非如预期那样直截了当。 下面的代码片段复制源罐子全部依赖(运行时间+编译)一个Java项目到特定文件夹:

    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的原因是,我们不希望失败,如果源神器不能得到解决。 有可能是一个更优雅的方式,但我没有带看了深入地了解。

希望能帮助到你,

勒内



Answer 2:

刘若英答案将下载的直接依赖,并不是所有transitives依赖的来源罐子来源罐子。

这里是会做的伎俩任务:

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/' )
}

然后可以通过改变做的javadoc罐子非常相同的classifierjavadoc



Answer 3:

这里eskatos解决翻译中科特林DSL:

tasks {
    "copySourceJars"(Copy::class) {
        val sources = configurations.runtime.resolvedConfiguration.resolvedArtifacts.map {
            with(it.moduleVersion.id) { 
                dependencies.create(group, name, version, classifier = "sources") 
            }
        }
        from(
            configurations.detachedConfiguration(*sources.toTypedArray())
                .resolvedConfiguration.lenientConfiguration.getFiles(Specs.SATISFIES_ALL)
        )
        into(File("some-directory"))
    }
}


文章来源: how to copy all source jars using gradle
标签: gradle