gradle多模块开发

本文详细介绍如何使用Gradle构建工具进行多模块项目的搭建及配置,包括核心模块和Web模块的具体实现过程,并提供了完整的配置代码示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

参考文档:gradle的官方userguide.pdf文档的chapter 55和chapter 56.
gradle的多模块或项目开发一定不会比maven差,在我看来!大的项目分成多个模块来开发是常事.下文就介绍一下怎么用gradle开发多模块项目.对于gradle,在Eclipse和IDEA开者之间,毫无疑问选择IDEA作为IDE.
testweb是一个简单例子,项目只分成了core和web两个模块.其中core模块是放一些基本的或公共的java类,web模块放的是web Controller,配置,页面.所以最终打包项目时,core应打成一个jar包,而web模块引用(依赖)core模块,对于web的java类也打起一个jar包,这两个jar包最后是放在lib包下面再打成war包.项目的主要结构如下:
testweb
  core
    src
      main
        java
      test
        java
        resources
    build.gradle
  web
    src
      main
        java
        resources
      test
        java
    build.gradle
  build.gradle
  settings.gradle
core主要使用spring+spring data jpa(hibernate实现)+mysql


一.根据上面的项目结构,新建必要的目录和文件.
1.settings.gradle.只有一个模块来说,此文件是可选的.对于多模块,此文件是必须的.

 

include 'core','web'

 

 

2.这里将core和web模块的gradle配置也放到了顶层的build.gradle

build.gradle

 

 
  1. allprojects {

  2. apply plugin: 'java'

  3. group = 'org.exam'

  4. version = '1.0'

  5. sourceCompatibility = 1.8

  6. targetCompatibility = 1.8

  7. }

  8. subprojects {

  9. ext {

  10. slf4jVersion = '1.7.7'

  11. springVersion = '4.2.1.RELEASE'

  12. hibernateVersion = '4.3.1.Final'

  13. }

  14. [compileJava, compileTestJava, javadoc]*.options*.encoding = 'UTF-8'

  15. repositories {

  16. mavenCentral()

  17. }

  18. configurations {

  19. //compile.exclude module: 'commons-logging'

  20. all*.exclude module: 'commons-logging'

  21. }

  22. dependencies {

  23. compile(

  24. "org.slf4j:jcl-over-slf4j:${slf4jVersion}",

  25. "org.slf4j:slf4j-log4j12:${slf4jVersion}",

  26. "org.springframework:spring-context:$springVersion",

  27. "org.springframework:spring-orm:$springVersion",

  28. "org.springframework:spring-tx:$springVersion",

  29. "org.springframework.data:spring-data-jpa:1.5.2.RELEASE",

  30. "org.hibernate:hibernate-entitymanager:$hibernateVersion",

  31. "c3p0:c3p0:0.9.1.2",

  32. "mysql:mysql-connector-java:5.1.26",

  33. "commons-fileupload:commons-fileupload:1.3.1",

  34. "com.fasterxml.jackson.core:jackson-databind:2.3.1"

  35. )

  36. testCompile(

  37. "org.springframework:spring-test:$springVersion",

  38. "junit:junit:4.11"

  39. )

  40. }

  41. }

  42. project(':core') {

  43.  
  44. }

  45. project(':web') {

  46. apply plugin: "war"

  47. dependencies {

  48. compile project(":core")

  49. compile(

  50. "org.springframework:spring-webmvc:$springVersion",

  51. "org.apache.taglibs:taglibs-standard-impl:1.2.1"

  52. )

  53. providedCompile(

  54. "javax.servlet:javax.servlet-api:3.1.0",

  55. "javax.servlet.jsp:jsp-api:2.2.1-b03",

  56. "javax.servlet.jsp.jstl:javax.servlet.jsp.jstl-api:1.2.1"

  57. )

  58. }

  59. processResources{

  60. /* 从'$projectDir/src/main/product'目录下复制文件到'WEB-INF/classes'目录下覆盖原有同名文件*/

  61. from("$projectDir/src/main/product")

  62. }

  63.  
  64. /*自定义任务用于将当前子项目的java类打成jar包,此jar包不包含resources下的文件*/

  65. def jarArchiveName="${project.name}-${version}.jar"

  66. task jarWithoutResources(type: Jar) {

  67. from sourceSets.main.output.classesDir

  68. archiveName jarArchiveName

  69. }

  70.  
  71. /*重写war任务:*/

  72. war {

  73. dependsOn jarWithoutResources

  74. /* classpath排除sourceSets.main.output.classesDir目录,加入jarWithoutResources打出来的jar包 */

  75. classpath = classpath.minus(files(sourceSets.main.output.classesDir)).plus(files("$buildDir/$libsDirName/$jarArchiveName"))

  76. }

  77. /*打印编译运行类路径*/

  78. task jarPath << {

  79. println configurations.compile.asPath

  80. }

  81. }

  82.  
  83. /*从子项目拷贝War任务生成的压缩包到根项目的build/explodedDist目录*/

  84. task explodedDist(type: Copy) {

  85. into "$buildDir/explodedDist"

  86. subprojects {

  87. from tasks.withType(War)

  88. }

  89. }

此项目包括core和web两个模块,其中core为普通java模块,web为web模块,并且web依赖core.

a.打包web时,会先将web\src\main\resources下的文件复制到web\build\resources\main目录,然后复制web\src\main\product下的文件到web\build\resources\main目录来覆盖同名文件.
b.编译web\src\main\java下的java文件到web\build\classes\main目录,然后将web\build\classes\main的文件打成jar包.
c.将所需依赖,包括core-${version}.jar和web-${version}.jar复制到war包下的\WEB-INF\lib目录.将web\src\main\product下的文件复制到WEB-INF\classes目录

 

 

二.将项目导入IDEA去开发
三.测试.
1.先测试core模块.主要参考core\src\test\java\com\exam\repository\UserRepositoryTest.java.
2.再测试web模块.
a.先用junit测试controller.主要参考web\src\test\java\com\exam\web\UserControllerTest.java,
b.参考<<配置简单的嵌入式jetty>>测试(可选)
c.打再成war包,部署到tomcat或jetty测试.


源码:http://download.youkuaiyun.com/detail/xiejx618/7736387

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值