gradle多模塊開發(轉)


參考文檔: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.只有一個模塊來說,此文件是可選的.對於多模塊,此文件是必須的.

 

[plain]  view plain  copy
 
 在CODE上查看代碼片派生到我的代碼片
  1. include 'core','web'  

 

 

2.這里將core和web模塊的gradle配置也放到了頂層的build.gradle

build.gradle

 

[java]  view plain  copy
 
 在CODE上查看代碼片派生到我的代碼片
  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.csdn.net/detail/xiejx618/7736387

http://blog.csdn.net/xiejx618/article/details/38469865

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM