当前位置: 首页 > 知识库问答 >
问题:

如何使用gradle复制所有源jar

梁明辉
2023-03-14

我们有一个旧的playframework 1.2。x版本,我们将所有JAR复制到project/lib,以便playframework可以使用它们。我们也希望复制所有的源jar,这样当运行nig play eclipse时,我们就可以查看所有的第三方源。有没有办法让gradle做到这一点?

我的意思是当我运行gradle eclipse时下载的所有源代码罐,因为我看到它们下载了缓存位置。我们在一个项目中也为我们调用gradle eclipse,所以我们可以100%只使用gradle。

谢谢,迪恩

共有3个答案

郝修为
2023-03-14

以下是用Kotlin DSL翻译的eskatos解决方案:

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"))
    }
}
微生博简
2023-03-14

Rene回答将下载直接依赖的源罐,而不是所有过渡依赖的源罐。

下面是一个可以实现此目的的任务:

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来对javadocs jars执行同样的操作。

楚泳
2023-03-14

这并不像预期的那么直截了当。以下代码段将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')
    }

我们在这里使用宽松配置的原因是,如果源工件无法解决,我们不希望失败。也许有一种更优雅的方式,但我还没有深入研究。

希望有帮助,

勒内

 类似资料:
  • 理想情况下,我们希望添加一个任务,用于下载项目的第一级和可传递依赖项的所有源JAR。有办法做到这一点吗? 现在看来,这应该是默认的,至少对于第一级依赖项是这样,因为它提供了eclipse中的javadoc,这在完成代码时是非常好的。

  • 当我在gradle中运行构建任务时,它将所有的Java资源(从src/main/resources)复制到build/resources中。因为我有太重的文件,所以我的构建过程比可能的要慢得多。 有什么方法可以禁止复制它们,并迫使Java仅仅从src/main/resources使用它们吗?

  • 问题内容: 我正在使用gradle构建的开源项目。我想生成一个(project)-sources.jar文件,可以将其加载到我的IDE(IntelliJ IDEA)中并通过该项目进行调试。我知道如何生成文件(如果可以生成的话)。 我浏览了该项目可用的gradle任务,但没有一个可以生成source jar文件。 为该项目生成源jar文件的最简单方法是什么? 将源添加到包含已编译的类文件的jar文件

  • 我想获得在AWS上创建的资源列表,并根据创建日期对它们进行排序。

  • 我正在使用gradle构建我的项目,但gradle仅将工件复制到本地maven存储库,而不是所有依赖项。我需要的是将工件及其所有依赖项复制到本地maven存储库中。 请建议在gradle做这件事的方法。我尝试了gradle的文档,但没有成功。

  • 问题内容: 我已经编写了将Cookie保存在JavaScript中的代码。现在,无论我分配的值如何,都需要清除cookie。 是否有任何脚本模块可删除Javascript生成的所有cookie ? 我的示例代码: 我还能如何清除所有cookie? 当我在网络服务器上测试代码时会出现任何问题吗? 问题答案: 从表面上看,它看起来还不错-如果您调用从中读取的每个cookie ,那么所有cookie都将