我正在开发一个有多个模块的spring boot应用程序,我们正在使用Gradle来构建它。不幸的是,我不能得到梯度配置的权利。
项目结构如下:
parent
|
+ build.gradle
|
+ settings.gradle
|
+ core
| |
| + build.gradle
|
+ apis
| |
| + build.gradle
|
+ services
| |
| + build.gradle
|
+ data
| |
| + build.gradle
当我尝试构建项目时,我会遇到一些编译错误,如error:cannot find symbol
表示,服务中使用的数据中的类没有导入。我假设所有模块之间都是这样。
我父母建的。Gradle看起来是这样的:
buildscript {
ext {
springBootVersion = '2.0.0.BUILD-SNAPSHOT'
}
repositories {
mavenCentral()
maven { url "https://repo.spring.io/snapshot" }
maven { url "https://repo.spring.io/milestone" }
}
dependencies {
classpath("org.springframework.boot:spring-boot-gradle-plugin:${springBootVersion}")
}
}
apply plugin: 'eclipse'
apply plugin: 'idea'
allprojects {
apply plugin: 'java'
apply plugin: 'org.springframework.boot'
apply plugin: 'io.spring.dependency-management'
group = 'com.example'
version = '0.0.1-SNAPSHOT'
sourceCompatibility = 1.8
targetCompatibility = 1.8
repositories {
mavenCentral()
maven { url "https://repo.spring.io/snapshot" }
maven { url "https://repo.spring.io/milestone" }
}
dependencies {
testCompile('org.springframework.boot:spring-boot-starter-test')
}
}
dependencies {
compile project(':data')
compile project(':services')
compile project(':apis')
compile project(':core')
}
jar {
baseName = 'my-jar'
version = '0.0.1-SNAPSHOT'
}
设置。分级:
rootProject.name = 'my-app'
include ':apis'
include ':core'
include ':data'
include ':services'
其中一个子级(核心)在其构建中包含此内容。Gradle:
dependencies {
compile('org.springframework.boot:spring-boot-starter-actuator')
compile('org.springframework.boot:spring-boot-starter-quartz')
compile('org.springframework.boot:spring-boot-starter-tomcat')
runtime('com.h2database:h2')
compile project(':data')
compile project(':services')
compile project(':apis')
}
services Build.Gradle如下所示:
dependencies {
compile('org.springframework.boot:spring-boot-starter-quartz')
compile('org.springframework.boot:spring-boot-starter-data-jpa')
runtime('com.h2database:h2')
compile project(':data')
}
其他的也只声明依赖项。
依赖关系结构如下所示:
core - apis, services, data
apis - services, data
services - data
data -
编译错误示例:
/my-app/services/src/main/java/com/example/my-app/business/IssuedTokenService.java:3: error: package com.examples.data.dao does not exist import com.examples.data.dao.IssuedToken;
/my-app/services/src/main/java/com/example/my-app/business/IssuedTokenService.java:4: error: package com.examples.data.repository does not exist import com.examples.data.repository.IssuedTokenRepository;
/my-app/services/src/main/java/com/example/my-app/business/IssuedTokenService.java:12: error: cannot find symbol
private IssuedTokenRepository issuedTokenRepository;
symbol: class IssuedTokenRepository
location: class IssuedTokenService
/my-app/services/src/main/java/com/example/my-app/business/IssuedTokenService.java:15: error: cannot find symbol
public void saveToken(IssuedToken issuedToken) {
^
symbol: class IssuedToken
location: class IssuedTokenService
您应该从所有子模块(根build.gradle
文件、allprojects
块)中排除org.springframework.boot
,这些子模块是将构建到fat-jar的核心模块的依赖项。
将dependencymanagement
配置包含到所有spring引导托管子模块中:
dependencyManagement {
imports {
mavenBom "org.springframework.boot:spring-boot-starter-parent:${springBootVersion}"
}
}
问题的原因是核心模块fat-jar中没有子模块编译的jar文件。
答案与此相似。
关于多项目生成状态的分级文档:
“lib”依赖关系是执行依赖关系的一种特殊形式。它导致先构建另一个项目,并将具有另一个项目类的jar添加到类路径中。
因此,重新包装的jar会带来问题。
例如,如果项目b
依赖于项目a
,并且项目a
有一个应用于它的org.springframework.boot
插件,则简单的编译项目(':a')
依赖项将不起作用,因为项目jar在bootrepackage
或bootjar
任务期间被重新打包。由此产生的脂肪罐具有不同的结构,防止Gradle加载其类。
在这种情况下,应该按照以下方式编写依赖项:
dependencies {
compile project(':A').sourceSets.main.output
}
直接使用源集的输出等同于在重新打包前使用项目a
的“正常”结果jar。
在实用工具(数据)项目中放置:
bootJar {
enabled = false
}
jar {
enabled = true
}
如果kotlin dsl
tasks.getByName<BootJar>("bootJar") {
enabled = false
}
tasks.getByName<Jar>("jar") {
enabled = true
}
我用的是IntelliJ IDEA Pro 13.1.2。从未使用过13以下的任何版本。 当试图从IDE运行时,我得到以下消息:
我已经将Gradle项目导入IntelliJ IDEA 2016.3.3社区版。该项目包括2个内部和4个外部梯度模块。这是根< code>settings.gradle文件 在“Gradle项目”窗格上,我看到所有模块都已导入 但是在“项目”窗格上,只有内部模块 按“同步”和“刷新所有Gradle项目”按钮没有帮助。 虽然我看到从命令行运行,但这个gladle构建了所有6个模块。但我无法从IDE构
我有一个简单的分级项目,其中build.gradle如下所示: 失败:生成失败,出现异常。 请访问https://help.gradle.org获取更多帮助 在%1中生成失败 完整stacktrace如下所示: 我对Gradle不是很有经验。你能告诉我我做错了什么吗?
本文向大家介绍SpringBoot多模块项目框架搭建过程解析,包括了SpringBoot多模块项目框架搭建过程解析的使用技巧和注意事项,需要的朋友参考一下 这篇文章主要介绍了SpringBoot多模块项目框架搭建过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 创建根项目,New Project 创建一个名为 sms-bomber 的 Sp
我有一个基本的SpringBoot应用程序。使用Spring初始值设定项、嵌入式Tomcat、Thymeleaf模板引擎,并将包作为可执行的JAR文件。是一个带有Spring Boot的多模块项目,该项目将有3个模块。这里是父模块pom。xml 这里是模块核心 这里是模块web: 从父根目录,我使用以下方法生成所有模块: 但问题是tdk-web-0.0.2-SNAPSHOT。jar不包含tdk-c
父项目为demo-mybatis子模块为mybatis-dao、demo-service。demo-mybatis pom.xml如下: 4.0.0 pom mybatis-DAO Demo-service Demo-mybatis-app org.springframework.Boot spring-boot-starter-parent 2.3.2.release com.example D