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

如何使用Gradle Kotlin-DSL添加本地资源

堵浩波
2023-03-14

我试着用kotlin DSL测试5级。

Hasans-Air:blogiclib h_ajsf$ gradle init --type=kotlin-library

Starting a Gradle Daemon, 1 busy Daemon could not be reused, use --status for details

Select build script DSL:

1: groovy

2: kotlin

Enter selection (default: kotlin) [1..2] 2

Project name (default: blogiclib): 

Source package (default: blogiclib): 

**BUILD SUCCESSFUL** in 16s

2 actionable tasks: 2 executed

Hasans-Air:blogiclib h_ajsf$ ls

build.gradle.kts gradlew settings.gradle.kts

gradle gradlew.bat src

Hasans-Air:blogiclib h_ajsf$ code .

Hasans-Air:blogiclib h_ajsf$ gradle build
package blogiclib

class Library {
    fun someLibraryMethod(): Boolean {
        return true
    }
}

生成的build.gradle.kts是:

plugins {
    id("org.jetbrains.kotlin.jvm").version("1.3.10")
}

repositories {
    jcenter()
}

dependencies {
    implementation("org.jetbrains.kotlin:kotlin-stdlib-jdk8")
    testImplementation("org.jetbrains.kotlin:kotlin-test")
    testImplementation("org.jetbrains.kotlin:kotlin-test-junit")
}

然后我生成了一个kotlin app,测试如下:

Hasans-Air:gradle h_ajsf$ gradle init --type=kotlin-application

Starting a Gradle Daemon (subsequent builds will be faster)

Select build script DSL:

1: groovy

2: kotlin

Enter selection (default: kotlin) [1..2] 2

Project name (default: gradle): blogic

Source package (default: blogic): 

**BUILD SUCCESSFUL** in 25s

2 actionable tasks: 2 executed

Hasans-Air:gradle h_ajsf$ ls

build.gradle.kts gradlew settings.gradle.kts

gradle gradlew.bat src

Hasans-Air:gradle h_ajsf$ code .

Hasans-Air:gradle h_ajsf$ gradle run
**BUILD SUCCESSFUL** in 6m 4s

3 actionable tasks: 3 executed

Hasans-Air:gradle h_ajsf$ gradle run

**> Task :run**

Hello world.

然后我将前面生成的libblogiclib.jar添加到文件夹:main\resources

package blogic

import blogiclib.LibraryKt

class App {
    val greeting: String
        get() {
            return "Hello world."
        }
}

fun main(args: Array<String>) {
    println("${App().greeting} = someLibraryMethod()")
}
plugins {
    id("org.jetbrains.kotlin.jvm").version("1.3.10")
    application
}

repositories {
    jcenter()
}

dependencies {
    implementation("org.jetbrains.kotlin:kotlin-stdlib-jdk8")
    testImplementation("org.jetbrains.kotlin:kotlin-test")
    testImplementation("org.jetbrains.kotlin:kotlin-test-junit")

}

application {
    mainClassName = "blogic.AppKt"
}

task<JavaCompile>("compile") {
    source = fileTree(file("src/main/resources/blogiclib.jar"))
}
Hasans-Air:gradle h_ajsf$ gradle run

e: /Users/h_ajsf/Documents/gradle/src/main/kotlin/blogic/App.kt: (6, 8): Unresolved reference: blogiclib

**&gt; Task :compileKotlin** FAILED

FAILURE: Build failed with an exception.

* What went wrong:

Execution failed for task ':compileKotlin'.

&gt; Compilation error. See log for more details

* Try:

Run with **--stacktrace** option to get the stack trace. Run with **--info** or **--debug** option to get more log output. Run with **--scan** to get full insights.

* Get more help at **https://help.gradle.org**

Deprecated Gradle features were used in this build, making it incompatible with Gradle 6.0.

Use '--warning-mode all' to show the individual deprecation warnings.

See https://docs.gradle.org/5.0/userguide/command_line_interface.html#sec:command_line_warnings

**BUILD FAILED** in 1s

2 actionable tasks: 2 executed

更新

根据收到的意见,我做了以下工作:

>

  • 将库文件移动到文件夹src/main/libs:
  • 将以下代码添加到build.gradle.kts:

    而不是:

    task<JavaCompile>("compile") {
        source = fileTree(file("src/main/resources/blogiclib.jar"))
    }
    

    但仍然得到相同的错误:(

  • 共有1个答案

    任云瀚
    2023-03-14

    您可以将所有jar文件包含在某些文件夹中,如下所示:

    dependencies {
        implementation(fileTree("libs/compile"))
        compileOnly(fileTree("libs/provided"))
    }
    

    或者,选择特定文件

    repositories {
        flatDir {
            dirs("libs/compile")
            dirs("libs/provided")
        }
    }
    
    dependencies {
        implementation(":gson-2.8.5")
        compileOnly(":javaee-api-8.0")
    }
    
     类似资料:
    • 问题内容: 我需要JRE使用仅英语版本的JRE资源的翻译版本。 根据ResourceBundle.java文档,这很容易:使用正确的语言环境后缀添加本地化的资源。例如,标准 XMLSchemaMessages.properties 将成为翻译版本: XMLSchemaMessages_FR.properties 等等。 编辑:此特定文件位于:com \ sun \ org \ apache \ x

    • 正确地创建了Jar,并且在清单中提到了main类。我有以下几个问题: > 目标文件夹包含classes文件夹,而classes文件夹中有类文件。罐子里也有它们,所以为什么需要它们。我的目标是拥有一个只包含所有依赖项的可执行jar。 这些资源根本没有被添加到jar中。我已经根据网上看到的说明添加了变压器,但是没有用!!! 我完全没有关于如何包含资源的线索。感谢任何帮助!! 编辑:::: 这是我用于m

    • 我使用apache骆驼REST DSL使用springboot。所有的配置工作正常。现在我想添加REST留档使用骆驼swagger java组件。REST DSL和swagger java,开箱即用。我可以看到暴露的REST服务的JSON输出。 现在的问题是,我需要遵循哪些步骤,以便使用swagger ui查看camel REST文档? 我搜索了答案,但唯一的解决方案是从github下载swagg

    • 问题内容: 我想使用Leiningen来构建和开发Clojure项目。有没有办法修改project.clj告诉它从本地目录中选择一些jar? 我有一些专有的jar,无法上传到公共存储库。 另外,可以使用leiningen维护clojure项目的“ lib”目录吗?如果我的一堆clojure项目共享相同的jar,我不想为每个jar保留一个单独的副本。 谢谢 问题答案: 你可以将你的私人jar放进去,

    • 问题内容: 如何在jsfiddle中添加JSON文件?我有一个JSON文件,但无法将其附加到jsfiddle中。我可以制作一个JSON对象并使用它,但是有什么方法可以将外部JSON文件添加到小提琴中? 问题答案: 您可以利用跨域资源共享(CORS)的功能来完成您的任务。 基本上,CORS的工作原理是,如果在HTTP响应中设置了标头,则无论AJAX加载的内容位于同一域还是其他域中,都可以在我们的脚本

    • 问题内容: 如何在netbeans项目的类路径中添加文件夹(例如,包含arts的资源文件夹)?我设法通过编辑项目的NB生成的jar文件(即其MANIFEST.MF文件+手动复制资源)来手动完成此操作,但是应该有一种方法可以告诉netbeans并注意资源,不是吗? 文件夹结构如下所示: 我不想将艺术品包装到罐子里,因为我希望艺术品可以轻松更换。如果我将art文件夹添加到src文件夹,则NB可以正常编