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

Fat Jar使用Gradle静态编程语言DSL扩展依赖关系

阴礼骞
2023-03-14

我试图在基于静态编程语言的gradle文件中使用以下内容构建一个胖罐子。

val fatJar = task("fatJar", type = Jar::class) {
  baseName = "safescape-lib-${project.name}"
  // manifest Main-Class attribute is optional.
  // (Used only to provide default main class for executable jar)
  from(configurations.runtimeClasspath.map({ if (it.isDirectory) it else zipTree(it) }))
  with(tasks["jar"] as CopySpec)
}

tasks {
  "build" {
    dependsOn(fatJar)
  }
}

但是,胖罐扩展了所有依赖项。我希望将jars按原样包含在/lib目录中,但我无法弄清楚如何实现这一点。

谁能给我一些建议,告诉我如何才能做到这一点?

谢啦

共有2个答案

娄鹤轩
2023-03-14

如果有人使用kotlin-multiPlatform插件,配置有点不同。假设JS模块中嵌入JS前端的JVM应用程序:

afterEvaluate {
  tasks {
    create("jar", Jar::class).apply {
      dependsOn("jvmMainClasses", "jsJar")
      group = "jar"
      manifest {
        attributes(
          mapOf(
            "Implementation-Title" to rootProject.name,
            "Implementation-Version" to rootProject.version,
            "Timestamp" to System.currentTimeMillis(),
            "Main-Class" to mainClassName
          )
        )
      }
      val dependencies = configurations["jvmRuntimeClasspath"].filter { it.name.endsWith(".jar") } +
          project.tasks["jvmJar"].outputs.files +
          project.tasks["jsJar"].outputs.files
      dependencies.forEach { from(zipTree(it)) }
      into("/lib")
    }
  }
}
闻人弘雅
2023-03-14

你在规范的< code>map部分使用了< code>zipTree,它的行为与文档一致:它解压不是目录的文件。

如果您想要< code>/lib中的jar,请将您的< code>from替换为:

from(configurations.runtimeClasspath) {
    into("lib")
}
 类似资料:
  • 我试图用OkHttp和Cucumber在静态编程语言中设置一个Spring启动项目,并且在运行Cucumber任务时遇到以下错误。如何修复? 还有build gradle kts片段 我看到了这个错误https://github.com/square/okio/issues/647看起来可能是它,并修复了这个build.gradle,我如何将其翻译为kotlinbuild.gradle.kts?

  • 为了描述Gradle构建脚本,我们可以通过< code>build.gradle.kts文件使用Kotlin。在< code>dependencies和build 部分全局定义要使用的Kotlin版本是一个常见的问题(在给定的情况下使用不同的版本是相当罕见的)。 请考虑以下代码 (Gradle 4.3.1): 如您所见,kotlin(在本例中为1.2.30)定义了两次:和,它们通常没有区别。由于D

  • 有可能从Java代码中访问扩展函数吗? 我在静态编程语言文件中定义了扩展函数。 其中MyModel是(生成的)java类。现在,我想在我的普通java代码中访问它: 然而,那是行不通的。IDE无法识别bar()方法,编译失败。 work使用kotlin的静态函数: 通过使用导入com.test.extensions.ExtensionsPackage我的IDE似乎配置正确。 我从kotlin文档中

  • 我使用的是Gradle 5.5,我有一个基于Groovy的构建脚本,我正试图将其迁移到Kotlin DSL。任务包含将所有依赖项复制到jar文件的典型行: 我找不到一种方法来把这一行翻译成Kotlin DSL。 让我给你一些背景知识。这是我最初基于Groovy的构建脚本: 这是我基于静态编程语言的构建脚本。它运行良好,除了一行:

  • 我有一个具有多个依赖项的Java项目,我想使用Kotlin DSL与Gradle一起打包到一个胖罐子中。 当我运行,构建成功,但当我尝试运行它时,它找不到主类: 以下是完整的文件: 以及我的回购协议的链接:https://github.com/darkasphalt/myapp

  • 当使用Java和JUnit 5时,我可以使用如下非静态字段注册扩展: 当我尝试使用Kotlin (1.4.10)时,我似乎无法让它工作。我试过举个例子: 但它失败了: 当我试着运行它的时候。 如果我尝试添加一个< code>@JvmField注释: 它失败,而是出现编译时错误: 我能做的是将它移动到一个同伴对象: 现在它可以工作了。但是我不能在伴随对象中声明,因为构造函数的输入()还不可用。我只是