参考文档: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.只有一个模块来说,此文件是可选的.对于多模块,此文件是必须的.

  1. 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. project(':web') {
  45. apply plugin: "war"
  46. dependencies {
  47. compile project(":core")
  48. compile(
  49. "org.springframework:spring-webmvc:$springVersion",
  50. "org.apache.taglibs:taglibs-standard-impl:1.2.1"
  51. )
  52. providedCompile(
  53. "javax.servlet:javax.servlet-api:3.1.0",
  54. "javax.servlet.jsp:jsp-api:2.2.1-b03",
  55. "javax.servlet.jsp.jstl:javax.servlet.jsp.jstl-api:1.2.1"
  56. )
  57. }
  58. processResources{
  59. /* 从'$projectDir/src/main/product'目录下复制文件到'WEB-INF/classes'目录下覆盖原有同名文件*/
  60. from("$projectDir/src/main/product")
  61. }
  62. /*自定义任务用于将当前子项目的java类打成jar包,此jar包不包含resources下的文件*/
  63. def jarArchiveName="${project.name}-${version}.jar"
  64. task jarWithoutResources(type: Jar) {
  65. from sourceSets.main.output.classesDir
  66. archiveName jarArchiveName
  67. }
  68. /*重写war任务:*/
  69. war {
  70. dependsOn jarWithoutResources
  71. /* classpath排除sourceSets.main.output.classesDir目录,加入jarWithoutResources打出来的jar包 */
  72. classpath = classpath.minus(files(sourceSets.main.output.classesDir)).plus(files("$buildDir/$libsDirName/$jarArchiveName"))
  73. }
  74. /*打印编译运行类路径*/
  75. task jarPath << {
  76. println configurations.compile.asPath
  77. }
  78. }
  79. /*从子项目拷贝War任务生成的压缩包到根项目的build/explodedDist目录*/
  80. task explodedDist(type: Copy) {
  81. into "$buildDir/explodedDist"
  82. subprojects {
  83. from tasks.withType(War)
  84. }
  85. }

此项目包括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

gradle多模块开发(转)的更多相关文章

  1. gradle多模块开发

    参考文档:gradle的官方userguide.pdf文档的chapter 55和chapter 56.gradle的多模块或项目开发一定不会比maven差,在我看来!大的项目分成多个模块来开发是常事 ...

  2. React Native Android原生模块开发实战|教程|心得|怎样创建React Native Android原生模块

    尊重版权,未经授权不得转载 本文出自:贾鹏辉的技术博客(http://blog.csdn.net/fengyuzhengfan/article/details/54691503) 告诉大家一个好消息. ...

  3. Xposed模块开发基本方法记录

    由于某些课程实验的要求,需要通过xposed框架对某应用进行hook操作,笔者选用了开源且免费的xposed框架进行实现.虽然网上存在一些利用xposed实现特定功能的文章资源,但大多均将xposed ...

  4. Xposed模块开发学习记录

    Xposed模块相关API可以参考在线文档: https://api.xposed.info/reference/packages.html     入门教程可以参考: https://github. ...

  5. AngularJS多模块开发

    angularJS中的多模块开发是指多个module模块开发,步骤为: 1. 确定主模块    var app=angular.module('myApp',[]); 2. 其他的子模块添加到主模块后 ...

  6. js模块开发(一)

    现在嵌入页面里面的javascript代码越来越复杂,于是可能依赖也越来越严重,使用别人开发的js也越来越多,于是在理想情况下,我们只需要实现核心的业务逻辑,其他都可以加载别人已经写好的模块. 于是j ...

  7. seajs实现JavaScript 的 模块开发及按模块加载

    seajs实现了JavaScript 的 模块开发及按模块加载.用来解决繁琐的js命名冲突,文件依赖等问题,其主要目的是令JavaScript开发模块化并可以轻松愉悦进行加载. 官方文档:http:/ ...

  8. Asp.net Mvc模块化开发之“开启模块开发、调试的简单愉快之旅”

    整个世界林林种种,把所有的事情都划分为对立的两个面. 每个人都渴望的财富划分为富有和贫穷,身高被划分为高和矮,身材被划分为胖和瘦,等等. 我们总是感叹,有钱人的生活我不懂;有钱人又何尝能懂我们每天起早 ...

  9. 基于ASP.NET MVC的热插拔模块式开发框架(OrchardNoCMS)--模块开发

    之前文章中给大家说明了下我这个小小的想法,发现还是有不少人的支持和关注.你们的鼓励是对我最大的支持. 我总结了了大家的评论,有以下几个问题: 1.希望有更多的文档说明. 2.希望介绍下Orchard的 ...

随机推荐

  1. cocos2d-x 新建项目 Cannot open include file: ‘cocos2d.h’

    新建cocos2d-x 项目分这么几步. 1. 下载最新的cocos2d-x 2. 安装 vs2010 3. 解压cocos2d-x 压缩包,并双击"install-templates-ms ...

  2. Codeforces Round #277 (Div. 2) 题解

    Codeforces Round #277 (Div. 2) A. Calculating Function time limit per test 1 second memory limit per ...

  3. 浅谈Jquery的使用下篇

    上一篇我们已经探讨了Jquery的有关的内容,简单的选择器以及一些Jquery的属性事件和方法等内容,让我们简单的学到了Jquery的比较基础的内容,下面我们就来探讨Jquery的一些其它的内容,比如 ...

  4. PHP学习之-正则表达式

    PHP学习之-正则表达式 1.什么是正则表达式 正则表达式是对字符串处理额一种逻辑公式,就是用特定的字符串组合成一个规则的字符串,称之为正则匹配模式 $p = '/apple/'; $str = '' ...

  5. python web with bottle and session (beaker)

    python web with bottle and session (beaker) http://icodesnip.com/snippet/python/python-web-with-bott ...

  6. PHP移动互联网开发笔记(5)——文件的上传下载

    原文地址:http://www.php100.com/html/php/rumen/2014/0326/6706.html 一.文件的上传 1.client设置: (1).在 标签中将enctype和 ...

  7. Swift - 使用TableView的静态单元格进行页面布局

    通过使用静态单元格的列表,我们可以很方便的进行页面布局.下面通过一个“添加任务页面”来进行演示. 效果图如下: 实现步骤: 1,在storyboard中拖入一个TableViewController, ...

  8. (android高仿系列)今日头条 --新闻阅读器 (三) 完结 、总结 篇

    从写第一篇今日头条高仿系列开始,到现在已经过去了1个多月了,其实大体都做好了,就是迟迟没有放出来,因为我觉得,做这个东西也是有个过程的,我想把这个模仿中一步一步学习的过程,按照自己的思路写下来,在根据 ...

  9. Minor GC、Major GC和Full GC之间的区别(转)

    在 Plumbr 从事 GC 暂停检测相关功能的工作时,我被迫用自己的方式,通过大量文章.书籍和演讲来介绍我所做的工作.在整个过程中,经常对 Minor.Major.和 Full GC 事件的使用感到 ...

  10. eval 捕获dbi错误

    [root@dr-mysql01 ~]# cat t2.pl use DBI; my $dbUser='zabbix'; my $user="root"; my $passwd=& ...