我有以下项目结构:
RootProject
├── lib
└── src
└── main
└── java
└── ...
├── test-project
└── src
└── main
└── java
└── ...
└── build.gradle
我试图遵循Gradle多项目构建的最佳实践,因此我在单个build.Gradle文件中描述了整个构建过程。
“rootProject”只是一个没有任何代码的根项目,它的唯一目的是为它的子项目“lib”和“test-project”提供一个单独的build.gradle。
“Test-Project”是使用“lib”作为编译依赖项springboot项目(微服务)。
我的通用Build.Gradle看起来如下:
plugins{
id 'java'
id 'org.springframework.boot' version '2.1.1.RELEASE'
id 'io.spring.dependency-management' version '1.0.6.RELEASE'
}
allprojects {
repositories {
jcenter()
}
}
subprojects {
apply plugin: 'io.spring.dependency-management'
apply plugin: 'org.springframework.boot'
group = 'com.xxx.yyy'
version = '1.0'
sourceCompatibility = 1.8
targetCompatibility = 1.8
}
project(":lib"){
apply plugin: 'java-library'
dependencies {
implementation group: 'org.springframework.boot', name: 'spring-boot-starter-web'
implementation group: 'org.springframework.boot', name: 'spring-boot-starter-data-jpa'
testImplementation group: 'org.springframework.boot', name: 'spring-boot-starter-test'
}
bootJar { enabled = false }
jar { enabled = true }
}
project(":test-project"){
apply plugin: 'java'
dependencies {
implementation group: 'org.springframework.boot', name: 'spring-boot-starter-web'
implementation group: 'org.springframework.boot', name: 'spring-boot-starter-data-jpa'
implementation project(":lib")
implementation ('mysql:mysql-connector-java')
}
}
实现了“库”和“测试项目”的成功构建。然而,当我试图在根项目上执行“bootjar”任务(它应该触发所有子项目上的“build”任务)时,我得到了以下错误:
Main class name has not been configured and it could not be resolved
有什么想法吗?
多项目构建最佳实践简介
当你说:
我试图遵循Gradle多项目构建的最佳实践,因此我在单个build.Gradle文件中描述了整个构建过程。
我不认为这实际上是一个好的做法,这也不是你提到的指南中真正推荐的。
在指南介绍中:
虽然每个子项目都可以完全独立于其他子项目来配置自己,但子项目具有共同的特征是很常见的。因此,通常最好在项目之间共享配置,因此相同的配置会影响多个子项目。
=>实际上,子项目之间共享的公共特性应该配置在根项目构建的中心位置。
在指南的后面部分(在本节中)有一个示例,它在根项目脚本中定义了子项目特定配置,但在示例描述中有一个注释:
所有的构建逻辑都在根项目的构建脚本中
(2):我们在这里这样做,因为它使布局更容易一些。我们通常将特定于项目的东西放入相应项目的构建脚本中。
关于你的问题
我假设您的lib
项目是一个简单的“简单”Java lib项目(没有spring或springboot依赖关系),test-project
是包含springboot应用程序类的项目(特别是@SpringBootApplication
主应用程序类)。按照上面描述的最佳实践,您应该有三个不同的项目构建脚本:
根项目
:用于在子项目中定义公共配置共享(Java插件配置、存储库、共享依赖项等)lib
项目:此lib项目的特定配置(Java库插件、特定依赖项、...)
spring-boot
插件应用于此子项目,这实际上是您错误“找不到主类”io.Spring.dependency-management
插件(在此cas中,在根项目构建中应用此依赖插件,以便在两个子项目中使用相同的spring版本是有意义的)示例
根项目生成
ext{
slf4jVersion = "1.7.25"
}
subprojects {
apply plugin: "java"
// if both subprojects share some Spring related dependencies, apply the Spring `io.spring.dependency-management` here.
group = 'com.xxx.yyy'
version = '1.0'
sourceCompatibility = 1.8
targetCompatibility = 1.8
repositories {
jcenter()
}
}
“lib”项目生成
plugins{
id 'java-library'
}
dependencies {
implementation group: 'org.slf4j', name: 'slf4j-api', version: slf4jVersion
// lib dependencies
}
“test-project”生成
plugins {
id "org.springframework.boot" version "2.1.1.RELEASE"
}
apply plugin: 'io.spring.dependency-management'
dependencies {
implementation project(":lib")
implementation('org.springframework.boot:spring-boot-starter-web')
testImplementation('org.springframework.boot:spring-boot-starter-test')
implementation ('mysql:mysql-connector-java')
// ...
}
根据您的评论进行编辑:如果lib
项目需要与spring数据相关的内容,请按以下方式应用io.Spring.dependency-management
(请参阅《spring参考指南》中的更多详细信息)
plugins{
id 'java-library'
id "org.springframework.boot" version "2.1.1.RELEASE" apply false
}
apply plugin: 'io.spring.dependency-management'
dependencyManagement {
imports {
mavenBom org.springframework.boot.gradle.plugin.SpringBootPlugin.BOM_COORDINATES
}
}
dependencies {
implementation group: 'org.slf4j', name: 'slf4j-api', version: slf4jVersion
implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
// lib dependencies
}
我正在使用Gradle构建一个项目,但是每当我想通过
我有一个项目,它是用gradle 6或更旧的版本构建的。 我检查了gradle 7中关于编译/测试编译问题的其他stakeoverflow讨论,并将所有依赖项从编译/测试编译更改为api/测试实现。 但当我做gradle build时,它仍然不起作用。 它仍然返回名为“compile”的配置 我检查过这个: 使用gradle构建错误找不到方法testCompile() Gradle中的实现、api
我正在从事一个Gradle项目,该项目使用多个源集来构建不同的战争。 从命令行一切正常。格拉德正确地构建了战争。但是在IntelliJ中它说对于每个*。src/k下的java文件无法解析来自src/main的依赖关系。 我试图通过使用idea gradle插件将目录添加为SourceDir来修复它,但不幸的是,这没有起作用。
我在intellij中创建了一个gradle/scala项目。这是我的项目结构 这些是我build.gradle文件的内容 主要课程内容 当我试图构建jar并执行它时,会出现一个错误。这里可能出了什么错?
几天来,我一直在尝试使用nativescript。我的所有安装都进行得很好,但在执行tns运行的android——emulator时,它给了我以下错误: MiC@USERMINGW32 ~/Android项目/HelloWorld$tns运行Android搜索设备。。。跳过准备。正在生成项目。。。Gradle构建。。。 失败:生成失败,出现异常。 > 问题:配置根项目“HelloWorld”时出现