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.只有一个模块来说,此文件是可选的.对于多模块,此文件是必须的.
- include 'core','web'
2.这里将core和web模块的gradle配置也放到了顶层的build.gradle
build.gradle
- 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
gradle多模块开发(转)的更多相关文章
- gradle多模块开发
参考文档:gradle的官方userguide.pdf文档的chapter 55和chapter 56.gradle的多模块或项目开发一定不会比maven差,在我看来!大的项目分成多个模块来开发是常事 ...
- React Native Android原生模块开发实战|教程|心得|怎样创建React Native Android原生模块
尊重版权,未经授权不得转载 本文出自:贾鹏辉的技术博客(http://blog.csdn.net/fengyuzhengfan/article/details/54691503) 告诉大家一个好消息. ...
- Xposed模块开发基本方法记录
由于某些课程实验的要求,需要通过xposed框架对某应用进行hook操作,笔者选用了开源且免费的xposed框架进行实现.虽然网上存在一些利用xposed实现特定功能的文章资源,但大多均将xposed ...
- Xposed模块开发学习记录
Xposed模块相关API可以参考在线文档: https://api.xposed.info/reference/packages.html 入门教程可以参考: https://github. ...
- AngularJS多模块开发
angularJS中的多模块开发是指多个module模块开发,步骤为: 1. 确定主模块 var app=angular.module('myApp',[]); 2. 其他的子模块添加到主模块后 ...
- js模块开发(一)
现在嵌入页面里面的javascript代码越来越复杂,于是可能依赖也越来越严重,使用别人开发的js也越来越多,于是在理想情况下,我们只需要实现核心的业务逻辑,其他都可以加载别人已经写好的模块. 于是j ...
- seajs实现JavaScript 的 模块开发及按模块加载
seajs实现了JavaScript 的 模块开发及按模块加载.用来解决繁琐的js命名冲突,文件依赖等问题,其主要目的是令JavaScript开发模块化并可以轻松愉悦进行加载. 官方文档:http:/ ...
- Asp.net Mvc模块化开发之“开启模块开发、调试的简单愉快之旅”
整个世界林林种种,把所有的事情都划分为对立的两个面. 每个人都渴望的财富划分为富有和贫穷,身高被划分为高和矮,身材被划分为胖和瘦,等等. 我们总是感叹,有钱人的生活我不懂;有钱人又何尝能懂我们每天起早 ...
- 基于ASP.NET MVC的热插拔模块式开发框架(OrchardNoCMS)--模块开发
之前文章中给大家说明了下我这个小小的想法,发现还是有不少人的支持和关注.你们的鼓励是对我最大的支持. 我总结了了大家的评论,有以下几个问题: 1.希望有更多的文档说明. 2.希望介绍下Orchard的 ...
随机推荐
- 在JS中,一个自定义函数如何调用另一个自定义函数中的变量
function aa1511() { var chengshi="马鞍山"; var shengfen="安徽省"; return shengfen+&quo ...
- 总结NHibernate 中删除数据的几种方法
今天下午有人在QQ群上问在NHibernate上如何根据条件删除多条数据,于是我自己就写了些测试代码,并总结了一下NHibernate中删除数据的方式,做个备忘.不过不能保证囊括所有的方式,如果还有别 ...
- CentOS查看端口是否被占用
CentOS查看端口是否被占用 本文介绍了linux中查看某一端口是否被占用的方法,有关netstat命令的使用技巧,感兴趣的朋友可以参考下. 使用命令: netstat -tunlp 会显示所有端口 ...
- 解决cocoapods在64位iOS7系统以下的警告问题
今天碰到一个非常奇怪的问题.XCODE提示这种警告 Pods was rejected as an implicit dependency for 'libPods.a' because its ar ...
- Android:解决client从server上获取数据乱码的方法
向server发送HTTP请求.接收到的JSON包为response,用String content = EntityUtils.toString(response.getEntity()," ...
- 为数据元素DATA Element分配搜索帮助
搜索帮助可以分配给数据元素,程序中可以直接参照该数据元素具体如下: 1. 2. 程序中使用. PARAMETERS:p_vbeln TYPE ZVBELN_01. 3. 效果:
- Servlet过滤器——过滤器分析流量
1.概述 Servlet过滤器可以对用户提交的数据或服务器返回的数据进行更改.任何到达服务器的请求都会首先经过过滤器的处理.本实例应用过滤器的这个特点,编写了一个在过滤器中统计网站流量的实例. 本实例 ...
- 修改进程占用内存SetProcessWorkingSetSize函数(多篇相关文章值得学习)
物理内存和虚拟内存 物理内存,在应用中,自然是顾名思义,物理上,真实的插在板子上的内存是多大就是多大了.看机器配置的时候,看的就是这个物理内存. 如果执行的程序很大或很多,就会导致物理内存消耗殆尽.为 ...
- cocos2d-x关于CCTableView的“乱序问题”的理解
Cocos2d-x有一个不错的控件CCTableView.之前用的时候发现有cell的顺序错乱和重复出现的问题.后来仔细看了一下源码,发现是自己用法错误.但是网上有人说是一个bug,要改源码.我发现2 ...
- org.apache.jasper.JasperException: java.lang.ClassCastException
异常信息: org.apache.jasper.JasperException: java.lang.ClassCastException:org.apache.catalina.util.Defau ...