设为首页 收藏本站
查看: 1118|回复: 0

[经验分享] gradle多模块开发

[复制链接]

尚未签到

发表于 2017-3-2 10:45:43 | 显示全部楼层 |阅读模式
  参考文档: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
  

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



[java] view plain copy
  

  • allprojects {
  •     apply plugin: 'java'  
  •     group = 'org.exam'  
  •     version = '1.0'  
  •     sourceCompatibility = 1.8  
  •     targetCompatibility = 1.8  
  • }
  • subprojects {
  •     ext {
  •         slf4jVersion = '1.7.7'  
  •         springVersion = '4.2.1.RELEASE'  
  •         hibernateVersion = '4.3.1.Final'  
  •     }
  •     [compileJava, compileTestJava, javadoc]*.options*.encoding = 'UTF-8'  
  •     repositories {
  •         mavenCentral()
  •     }
  •     configurations {
  •         //compile.exclude module: 'commons-logging'  
  •         all*.exclude module: 'commons-logging'  
  •     }
  •     dependencies {
  •         compile(
  •                 "org.slf4j:jcl-over-slf4j:${slf4jVersion}",  
  •                 "org.slf4j:slf4j-log4j12:${slf4jVersion}",  
  •                 "org.springframework:spring-context:$springVersion",  
  •                 "org.springframework:spring-orm:$springVersion",  
  •                 "org.springframework:spring-tx:$springVersion",  
  •                 "org.springframework.data:spring-data-jpa:1.5.2.RELEASE",  
  •                 "org.hibernate:hibernate-entitymanager:$hibernateVersion",  
  •                 "c3p0:c3p0:0.9.1.2",  
  •                 "mysql:mysql-connector-java:5.1.26",  
  •                 "commons-fileupload:commons-fileupload:1.3.1",  
  •                 "com.fasterxml.jackson.core:jackson-databind:2.3.1"  
  •         )
  •         testCompile(
  •                 "org.springframework:spring-test:$springVersion",  
  •                 "junit:junit:4.11"  
  •         )
  •     }
  • }
  • project(':core') {  

  • }
  • project(':web') {  
  •     apply plugin: "war"  
  •     dependencies {
  •         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"  
  •         )
  •     }
  •     processResources{
  •         /* 从'$projectDir/src/main/product'目录下复制文件到'WEB-INF/classes'目录下覆盖原有同名文件*/  
  •         from("$projectDir/src/main/product")  
  •     }

  •     /*自定义任务用于将当前子项目的java类打成jar包,此jar包不包含resources下的文件*/  
  •     def jarArchiveName="${project.name}-${version}.jar"  
  •     task jarWithoutResources(type: Jar) {
  •         from sourceSets.main.output.classesDir
  •         archiveName jarArchiveName
  •     }

  •     /*重写war任务:*/  
  •     war {
  •         dependsOn jarWithoutResources
  •         /* classpath排除sourceSets.main.output.classesDir目录,加入jarWithoutResources打出来的jar包 */  
  •         classpath = classpath.minus(files(sourceSets.main.output.classesDir)).plus(files("$buildDir/$libsDirName/$jarArchiveName"))  
  •     }
  •     /*打印编译运行类路径*/  
  •     task jarPath << {
  •         println configurations.compile.asPath
  •     }
  • }

  • /*从子项目拷贝War任务生成的压缩包到根项目的build/explodedDist目录*/  
  • task explodedDist(type: Copy) {
  •     into "$buildDir/explodedDist"  
  •     subprojects {
  •         from tasks.withType(War)
  •     }
  • }
  
此项目包括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
  我参考文章做的demo:
https://github.com/langtianya/gradle_multi_pro_base

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-349207-1-1.html 上篇帖子: 使用SpringBoot1.4.0的一个坑 下篇帖子: HDFS之HBase伪分布安装
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表