我试着用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然后我将输出文件生成为:build\libs\blogiclib.jar
生成的Library.kt文件是:
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应用程序,并对其进行了如下测试:
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.然后,我将先前生成的lib blogiclib.jar添加到文件夹中:main\resources
并将我的App.kt文件设置为:
package blogic
import blogiclib.LibraryKt
class App {
val greeting: String
get() {
return "Hello world."
}
}
fun main(args: Array<String>) {
println("${App().greeting} = someLibraryMethod()")
}它的build.gradle.kts是根据我对这里的理解得出的:
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: gradle h_ajsf$ gradle运行e: h_ajsf$ (6,8):未解决的引用: blogiclib **> Task:h_ajsf$ FAILED ** FAILURE: Build,但有异常。*出了什么问题:任务执行失败:编译failed‘。>编译错误。有关更多详细信息,请参见日志* Try: Run with **--stacktrace*选项,以获取堆栈跟踪。使用**--info**或**-调试**选项运行,以获得更多日志输出。与**-扫描*一起运行以获得完整的洞察力。*在此构建中使用了***不推荐的Gradle特性,这使得它与Gradle 6.0不兼容。使用参见警告 **构建失败**在1s2可操作的任务中:2已执行
更新
关于所收到的评论,我做了以下几点:
src/main/libs:build.gradle.kts中:
配置{ create("externalLibs") }
依赖项{ "externalLibs"(files("src/main/libs/blogiclib.jar")) }而不是:
task<JavaCompile>("compile") {
source = fileTree(file("src/main/resources/blogiclib.jar"))
}但仍然有同样的错误:
发布于 2019-07-01 00:28:22
可以将所有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")
}https://stackoverflow.com/questions/53508161
复制相似问题