Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/spring-boot/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Spring boot Gradle,Kotlin,多模块项目:编译此项目时获取生成错误_Spring Boot_Gradle_Kotlin_Build - Fatal编程技术网

Spring boot Gradle,Kotlin,多模块项目:编译此项目时获取生成错误

Spring boot Gradle,Kotlin,多模块项目:编译此项目时获取生成错误,spring-boot,gradle,kotlin,build,Spring Boot,Gradle,Kotlin,Build,在根文件夹上运行gradle build命令时出现以下错误 E:\Code\mdh>gradle build > Task :multidemo:compileKotlin FAILED e: E:\Code\mdh\multidemo\src\main\kotlin\com\simbalarry\multidemo\SampleController.kt: (3, 23): Unresolved reference: somelib e: E:\Code\mdh\multidem

在根文件夹上运行gradle build命令时出现以下错误

E:\Code\mdh>gradle build

> Task :multidemo:compileKotlin FAILED
e: E:\Code\mdh\multidemo\src\main\kotlin\com\simbalarry\multidemo\SampleController.kt: (3, 23): Unresolved reference: somelib
e: E:\Code\mdh\multidemo\src\main\kotlin\com\simbalarry\multidemo\SampleController.kt: (18, 12): Unresolved reference: Tester

FAILURE: Build failed with an exception.

* What went wrong:
Execution failed for task ':multidemo:compileKotlin'.
> 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

BUILD FAILED in 5s
4 actionable tasks: 1 executed, 3 up-to-date
下面是我的项目结构,multidemo项目正在使用somelib的一些功能。此外,我还保留了一些库作为spring boot项目,因为稍后我将添加更多与spring boot相关的功能

Root Project
  |
  |---settings.gradle
  |---somelib
  |       |
  |       |---build.gradle
  |       |---settings.gradle
  |       |---src/main/kotlin/somepackage/Tester.kt
  |       |---src/main/kotlin/somepackage/SomeLibApplication.kt
  |
  |---multidemo
  |       |---build.gradle
  |       |---settings.gradle
  |       |---src/main/kotlin/somepackage/SampleController.kt
  |       |---src/main/kotlin/somepackage/MultidemoApplication.kt
下面是每个文件的内容

Root/settings.gradle

include ':somelib', ':multidemo'
pluginManagement {
    repositories {
        gradlePluginPortal()
    }
}
rootProject.name = 'somelib'
pluginManagement {
    repositories {
        gradlePluginPortal()
    }
}
rootProject.name = 'multidemo'
somelib/build.gradle

plugins {
    id 'org.springframework.boot' version '2.1.3.RELEASE'
    id 'org.jetbrains.kotlin.jvm' version '1.3.21'
    id 'org.jetbrains.kotlin.plugin.spring' version '1.3.21'
}

apply plugin: 'io.spring.dependency-management'

group = 'com.simbalarry'
version = '0.0.1-SNAPSHOT'
sourceCompatibility = '1.8'

repositories {
    mavenCentral()
}

dependencies {
    implementation 'org.springframework.boot:spring-boot-starter-web'
    implementation 'com.fasterxml.jackson.module:jackson-module-kotlin'
    implementation 'org.jetbrains.kotlin:kotlin-reflect'
    implementation 'org.jetbrains.kotlin:kotlin-stdlib-jdk8'
    testImplementation 'org.springframework.boot:spring-boot-starter-test'
}

compileKotlin {
    kotlinOptions {
        freeCompilerArgs = ['-Xjsr305=strict']
        jvmTarget = '1.8'
    }
}

compileTestKotlin {
    kotlinOptions {
        freeCompilerArgs = ['-Xjsr305=strict']
        jvmTarget = '1.8'
    }
}
plugins {
    id 'org.springframework.boot' version '2.1.3.RELEASE'
    id 'org.jetbrains.kotlin.jvm' version '1.3.21'
    id 'org.jetbrains.kotlin.plugin.spring' version '1.3.21'
}

apply plugin: 'io.spring.dependency-management'

group = 'com.simbalarry'
version = '0.0.1-SNAPSHOT'
sourceCompatibility = '1.8'

repositories {
    mavenCentral()
    mavenLocal()
}

dependencies {
    implementation 'org.springframework.boot:spring-boot-starter-web'
    implementation 'com.fasterxml.jackson.module:jackson-module-kotlin'
    implementation 'org.jetbrains.kotlin:kotlin-reflect'
    implementation 'org.jetbrains.kotlin:kotlin-stdlib-jdk8'
    compile project(':somelib')
    testImplementation 'org.springframework.boot:spring-boot-starter-test'
}

compileKotlin {
    kotlinOptions {
        freeCompilerArgs = ['-Xjsr305=strict']
        jvmTarget = '1.8'
    }
}

compileTestKotlin {
    kotlinOptions {
        freeCompilerArgs = ['-Xjsr305=strict']
        jvmTarget = '1.8'
    }
}
somelib/settings.gradle

include ':somelib', ':multidemo'
pluginManagement {
    repositories {
        gradlePluginPortal()
    }
}
rootProject.name = 'somelib'
pluginManagement {
    repositories {
        gradlePluginPortal()
    }
}
rootProject.name = 'multidemo'
somelib/src/main/kotlin/somepackage/Tester.kt

package com.simbalarry.somelib


/*
 * Created on : 17-03-2019
 * Author     : Nayan Kurude
 */

object Tester {
  fun getOutputText(): String {
    return "Sample Text"
  }
}
somelib/src/main/kotlin/somepackage/SomelibApplication.kt

package com.simbalarry.somelib

import org.springframework.boot.autoconfigure.SpringBootApplication
import org.springframework.boot.runApplication

@SpringBootApplication
class SomelibApplication

fun main(args: Array<String>) {
    runApplication<SomelibApplication>(*args)
}
package com.simbalarry.multidemo

import org.springframework.boot.autoconfigure.SpringBootApplication
import org.springframework.boot.runApplication

@SpringBootApplication
class MultidemoApplication

fun main(args: Array<String>) {
    runApplication<MultidemoApplication>(*args)
}
multidemo/settings.gradle

include ':somelib', ':multidemo'
pluginManagement {
    repositories {
        gradlePluginPortal()
    }
}
rootProject.name = 'somelib'
pluginManagement {
    repositories {
        gradlePluginPortal()
    }
}
rootProject.name = 'multidemo'
multidemo/src/main/kotlin/somepackage/MultiDemoApplication.kt

package com.simbalarry.somelib

import org.springframework.boot.autoconfigure.SpringBootApplication
import org.springframework.boot.runApplication

@SpringBootApplication
class SomelibApplication

fun main(args: Array<String>) {
    runApplication<SomelibApplication>(*args)
}
package com.simbalarry.multidemo

import org.springframework.boot.autoconfigure.SpringBootApplication
import org.springframework.boot.runApplication

@SpringBootApplication
class MultidemoApplication

fun main(args: Array<String>) {
    runApplication<MultidemoApplication>(*args)
}

谁能告诉我哪里做错了什么。

正如我在评论中所说:somelib应该是一个库。所以它不应该应用SpringBoot插件,它的作用是创建一个SpringBoot应用程序

somelib
的build.gradle文件应如下所示:

plugins {
    id 'java-library' // 1
    id 'org.springframework.boot' version '2.1.3.RELEASE' apply false // 2
    id 'io.spring.dependency-management' version '1.0.6.RELEASE' //3
    id 'org.jetbrains.kotlin.jvm' version '1.3.21'
    id 'org.jetbrains.kotlin.plugin.spring' version '1.3.21'
}

group = 'com.simbalarry'
version = '0.0.1-SNAPSHOT'
sourceCompatibility = '1.8'

repositories {
    mavenCentral()
}

dependencyManagement { // 4
    imports {
        mavenBom org.springframework.boot.gradle.plugin.SpringBootPlugin.BOM_COORDINATES
    }
}

ext['kotlin.version'] = '1.3.21' // 5

dependencies {
    implementation 'org.springframework.boot:spring-boot-starter-web'
    implementation 'com.fasterxml.jackson.module:jackson-module-kotlin'
    implementation 'org.jetbrains.kotlin:kotlin-reflect'
    implementation 'org.jetbrains.kotlin:kotlin-stdlib-jdk8'
    testImplementation 'org.springframework.boot:spring-boot-starter-test'
}

compileKotlin {
    kotlinOptions {
        freeCompilerArgs = ['-Xjsr305=strict']
        jvmTarget = '1.8'
    }
}

compileTestKotlin {
    kotlinOptions {
        freeCompilerArgs = ['-Xjsr305=strict']
        jvmTarget = '1.8'
    }
}
一些解释(参见代码中的注释):

  • 应用java library gradle插件,因为这是您想要创建的:一个可以在其他项目中使用的库
  • 将Spring引导插件添加到构建的类路径,而不应用它,以便以后能够使用它的BOM表。看
  • 应用spring依赖关系管理插件,通过使用spring启动BOM中指定的版本号,可以指定不带版本的依赖关系
  • 配置依赖关系管理插件以使用spring引导BOM
  • 将BOM(1.2.71)中使用的kotlin版本替换为要使用的版本。看

  • 只有根项目必须具有settings.gradle文件。另外,如果someLib是一个库,那么它不应该是一个应用程序,不应该有一个主类,也不应该是spring引导插件?我需要somelib中的spring引导功能。我从两个项目中删除了settings.gradle文件,仍然是相同的错误。没有“spring引导库”这样的东西。SpringBoot中使用的库只是一个普通的Java库,即一个包含类的jar。你所需要做的就是编译代码,使之成为一个常规的、标准的、普通的jar文件。你能告诉我我需要对哪个文件做什么更改才能使它正常工作吗?