我不知道为什么gradle对我这样做。我有一个看起来像这样的多项目:
|Parent
|client
|common
|service
Parent是一个空项目,而client和common是gradle java项目:我在客户端和service中都使用了一些类,因此我想创建一个通用项目并构建一个jar,稍后再在这两种服务中使用和客户。我可以构建通用jar,但是每当我尝试“添加对common的依赖”然后尝试“刷新gradle”时,它都会删除依赖并且无法构建! 这是我的工作: 在此处输入图片说明
然后按此,因为我要构建它
它只是消除了依赖性!!!
这是来自客户端项目的build.gradle文件:
plugins {
id 'org.springframework.boot' version '2.2.5.RELEASE'
id 'io.spring.dependency-management' version '1.0.9.RELEASE'
id 'java'
}
group = 'sot.rest'
version = '0.0.1-SNAPSHOT'
sourceCompatibility = '11'
repositories {
mavenCentral()
}
dependencies {
compile group: 'org.springframework', name: 'spring-web', version: '5.2.4.RELEASE'
implementation 'org.springframework.boot:spring-boot-starter'
// https://mvnrepository.com/artifact/com.google.code.gson/gson
compile group: 'com.google.code.gson', name: 'gson', version: '2.8.6'
}
问题来源:Stack Overflow
看看我对上一个问题的回答。它应该给您一个想法,如何构造和声明多模块gradle项目。
我认为,当您使用IntelliJ添加对模块的依赖时,它只是通过IntelliJ中的项目设置将其添加到项目结构中。然后,当您单击刷新时,IntelliJ将基于Gradle文件配置项目。
为了使其工作,父项目也应该是Gradle项目。如果不只是添加build.gradle,请settings.gradle在父目录下。 然后在settings.gradle添加子项目,如:
rootProject.name = 'Parend'
include('common') //this adds the module
include('client')
include('service')
然后,在和模块的build.gradle文件中client,service将common模块作为依赖项添加到:
dependencies {
implementation project(':common')
//...
}
如果您打算与Gradle进行更多合作,则可以阅读有关Gradle总体见解的这篇文章。
编辑:( 我知道您使用implementation它时不会抛出错误)
要与Gradle一起使用多模块项目,根项目也必须是Gradle项目。根目录可能包含也可能不包含任何源代码,但是它需要具有自己的Gradle文件。 因此,如果您的项目结构需要像这样:
Root project 'parent'
+--- Project ':client'
+--- Project ':common'
\--- Project ':service'
然后,parent需要将和子模块项目设置为Gradle项目。要使其成为parent项目,至少需要有一个settings.gradle文件并声明其包含子模块,类似于:
rootProject.name = 'parent'
include 'common'
include 'client'
include 'service'
每个模块(client,common,service)必须有build.gradle其目录下的文件。子模块使用common,因此service和client必须common在自己的build.gradle文件中添加as依赖项,例如:
dependencies {
implementation project(':common')
//and rest of required dependencies
//testCompile group: 'junit', name: 'junit', version: '4.12'
}
然后,您应该能够从common那些子模块中导入公共类,并且可以正确地重建或重新导入项目。
由于parent项目不包含任何源代码,因此它不需要自己的构建脚本,但是所有子模块的构建文件都需要在构建文件顶部声明java插件:
plugins {
id 'java'
}
由于您正在使用IntelliJ,并且您的项目以前可能具有不同的结构,因此IntelliJ设置中的项目结构现在可能会混乱。 要解决此问题,您可以转到“文件”->“项目结构”->“模块”,然后再次删除/重新导入父模块。
如果您现在没有很多课程,建议您创建一个新项目。在“新项目”窗口中,选择Gradle,然后取消选中“其他库和框架”中的Java。这将创建空白的Gradle项目。 生成项目后,右键单击parent,然后选择New-> Module。在新模块窗口中,再次选择Gradle并选中Java(因为子模块将包含源代码)。 这样,IntelliJ将自动将创建的模块包括到settings.gradle根/父项目的文件中,并且该模块的构建文件将包含基本配置(例如Java插件)。 但是您仍然将一个模块的依赖项添加到该模块的build.gradle文件中的另一个模块中。
回答来源:Stack Overflow
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。