这篇文章给大家介绍怎么在Gradle中构建一个多模块项目,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。
我们首先创建一个多项目构建:
mkdir cmdGradleProj && cd cmdGradleProj
gradle init
这时候
D:\cmdGradleProj> 目录下执行:tree /f
的项目结构如下:
│ build.gradle
│ gradlew
│ gradlew.bat
│ settings.gradle
│
├─.gradle
│ └─3.0
│ └─taskArtifacts
│ cache.properties
│ cache.properties.lock
│ fileHashes.bin
│ fileSnapshots.bin
│ fileSnapshotsToTreeSnapshotsIndex.bin
│ taskArtifacts.bin
│
└─gradle
└─wrapper
gradle-wrapper.jar
gradle-wrapper.properties
然后,创建多个模块,这里以 core 和 web 模块为例,先创建四个目录(test 文件夹用于编写测试类):
mkdir core\src\main\java
mkdir core\src\main\test
mkdir web\src\main\java
mkdir web\src\main\resources
core模块 :包含一些通用的组件,它们能够被程序的其他模块使用。例子中,只包含一个类:MessageService类返回 ‘Hello World!' 字符串。该模块有两个依赖:Junit 4.11与commons-lang3。
web模块:模块包含HelloWorld类,是程序的开端,它从MessageService对象中获取信息,并将接收到的信息写入一个日志文件中。该模块拥有两个依赖:它需要core模块,还使用Log4j作为日志。
现在,我们已经创建了所需的目录,下一步是配置Gradle构建,先对包含在多项目构建中的项目进行配置。
我们可以通过以下步骤,对包含在多项目构建中的项目进行配置:
1.在根项目的根目录下创建 settings.gradle 文件,一个多项目Gradle构建必须含有这个文件,因为它指明了那些包含在多项目构建中的项目。
2.确保 web 和 core 项目包含在我们的多项目构建中。
我们的 settings.gradle 文件如下:
include 'core'
include 'web'
简写:include 'core','web'
修改根目录下的 build.gradle:
// 所有子项目的通用配置
subprojects {
apply plugin: 'java'
// apply plugin: 'eclipse'
apply plugin: 'idea'
version = '1.0'
// JVM 版本号要求
sourceCompatibility = 1.8
targetCompatibility = 1.8
// java编译的时候缺省状态下会因为中文字符而失败
[compileJava,compileTestJava,javadoc]*.options*.encoding = 'UTF-8'
//定义版本号
ext {
springVersion = '4.3.3.RELEASE'
hibernateVersion='5.2.2.Final'
}
repositories {
mavenCentral()
}
jar {
manifest {
attributes("Implementation-Title": "Gradle")
}
}
configurations {
// 所有需要忽略的包定义在此
all*.exclude group: 'commons-httpclient'
all*.exclude group: 'commons-logging'
all*.exclude group: 'commons-beanutils', module: 'commons-beanutils'
}
dependencies {
// 通用依赖
compile(
"org.springframework:spring-context:$springVersion",
"org.springframework:spring-orm:$springVersion",
"org.springframework:spring-tx:$springVersion",
"org.springframework.data:spring-data-jpa:1.10.3.RELEASE",
"org.hibernate:hibernate-entitymanager:$hibernateVersion",
"c3p0:c3p0:0.9.1.2",
"mysql:mysql-connector-java:6.0.4",
"org.slf4j:slf4j-nop:1.7.21",
"commons-fileupload:commons-fileupload:1.3.2",
"com.fasterxml.jackson.core:jackson-databind:2.8.2"
)
// 依赖maven中不存在的jar
ext.jarTree = fileTree(dir: 'libs', include: '**/*.jar')
ext.rootProjectLibs = new File(rootProject.rootDir, 'libs').getAbsolutePath()
ext.jarTree += fileTree(dir: rootProjectLibs, include: '**/*.jar')
compile jarTree
// 测试依赖
testCompile(
"org.springframework:spring-test:$springVersion",
"junit:junit:4.12"
)
}
// 显示当前项目下所有用于 compile 的 jar.
task listJars(description: 'Display all compile jars.') << {
configurations.compile.each { File file -> println file.name }
}
}
接下来可以修改 core/build.gradle 来定义 core 模块的依赖:
// jar包的名字
archivesBaseName = 'core'
// 还可以定义其他配置,这里直接继承父模块中的配置
web 模块需要依赖 core 模块,故定义 web/build.gradle 如下:
apply plugin:"war"
dependencies{
// 依赖 core 模块
compile project(":core")
compile(
"org.springframework:spring-webmvc:$springVersion",
"org.apache.taglibs:taglibs-standard-impl:1.2.1"
)
//系统提供的依赖
providedCompile(
"javax.servlet:javax.servlet-api:3.1.0",
"javax.servlet.jsp:jsp-api:2.2.1-b03",
"javax.servlet.jsp.jstl:javax.servlet.jsp.jstl-api:1.2.1"
)
}
task jarWithoutResources(type: Jar) {
baseName project.name
from("$buildDir/classes/main")
}
war{
dependsOn jarWithoutResources
from("$projectDir/src/main/resources") {
include "*.properties"
into("WEB-INF/classes")
}
classpath=classpath - sourceSets.main.output
classpath fileTree(dir:libsDir, include:"${project.name}-${version}.jar")
}
task('jarPath')<<{
configurations.runtime.resolve().each {
print it.toString()+";"
}
println();
}
3. 编译项目
查看所有 jar:
> gradle listJars
// 查看各个模块的依赖:
> gradle :core:dependencies
> gradle :web:dependencies
//编译所有模块:
> gradle build
对比一下,这时候的目录如下:
│ build.gradle
│ gradlew
│ gradlew.bat
│ settings.gradle
│
├───.gradle
│ └───3.0
│ └───taskArtifacts
│ cache.properties
│ cache.properties.lock
│ fileHashes.bin
│ fileSnapshots.bin
│ fileSnapshotsToTreeSnapshotsIndex.bin
│ taskArtifacts.bin
│
├───core
│ │ build.gradle
│ │
│ ├───build
│ │ ├───libs
│ │ │ core-1.0.jar
│ │ │
│ │ └───tmp
│ │ └───jar
│ │ MANIFEST.MF
│ │
│ └───src
│ ├───main
│ │ └───java
│ └───test
│ └───java
├───gradle
│ └───wrapper
│ gradle-wrapper.jar
│ gradle-wrapper.properties
│
└───web
│ build.gradle
│
├───build
│ ├───libs
│ │ web-1.0.jar
│ │ web-1.0.war
│ │
│ └───tmp
│ ├───jarWithoutResources
│ │ MANIFEST.MF
│ │
│ └───war
│ MANIFEST.MF
│
└───src
└───main
├───java
└───resources
关于怎么在Gradle中构建一个多模块项目就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。
亿速云「云服务器」,即开即用、新一代英特尔至强铂金CPU、三副本存储NVMe SSD云盘,价格低至29元/月。点击查看>>
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。