Gradle构建多模块项目的方法步骤
通常我在使用Maven构建项目的时候是将应用项目划分为多个更小的模块。
Gradle项目也拥有多于一个组件,我们也将其称之为多项目构建(multi-projectbuild)。
我们首先创建一个多项目构建:
mkdircmdGradleProj&&cdcmdGradleProj gradleinit
这时候
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文件夹用于编写测试类):
mkdircore\src\main\java mkdircore\src\main\test mkdirweb\src\main\java mkdirweb\src\main\resources
core模块:包含一些通用的组件,它们能够被程序的其他模块使用。例子中,只包含一个类:MessageService类返回‘HelloWorld!'字符串。该模块有两个依赖:Junit4.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{ applyplugin:'java' //applyplugin:'eclipse' applyplugin:'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*.excludegroup:'commons-httpclient' all*.excludegroup:'commons-logging' all*.excludegroup:'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=newFile(rootProject.rootDir,'libs').getAbsolutePath() ext.jarTree+=fileTree(dir:rootProjectLibs,include:'**/*.jar') compilejarTree //测试依赖 testCompile( "org.springframework:spring-test:$springVersion", "junit:junit:4.12" ) } //显示当前项目下所有用于compile的jar. tasklistJars(description:'Displayallcompilejars.')<<{ configurations.compile.each{Filefile->printlnfile.name} } }
接下来可以修改core/build.gradle来定义core模块的依赖:
//jar包的名字 archivesBaseName='core' //还可以定义其他配置,这里直接继承父模块中的配置 web模块需要依赖core模块,故定义web/build.gradle如下: applyplugin:"war" dependencies{ //依赖core模块 compileproject(":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" ) } taskjarWithoutResources(type:Jar){ baseNameproject.name from("$buildDir/classes/main") } war{ dependsOnjarWithoutResources from("$projectDir/src/main/resources"){ include"*.properties" into("WEB-INF/classes") } classpath=classpath-sourceSets.main.output classpathfileTree(dir:libsDir,include:"${project.name}-${version}.jar") } task('jarPath')<<{ configurations.runtime.resolve().each{ printit.toString()+";" } println(); }
3.编译项目
查看所有jar:
>gradlelistJars //查看各个模块的依赖: >gradle:core:dependencies >gradle:web:dependencies //编译所有模块: >gradlebuild
对比一下,这时候的目录如下:
│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
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。