谈Gradle多项目工程的初始化

30 7月

本文版权归作者所有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

转载自夜明的孤行灯

本文链接地址: https://www.huangyunkun.com/2016/07/30/gradle-multi-project/

Gradle可谓java世界最流行的依赖管理和构建工具。

在安装了Java环境的情况再搭配Gradle Init Script工具我们可以很快初始化一个项目。比如

$ gradle init --type java-library
:wrapper
:init

BUILD SUCCESSFUL

Total time: 3.551 secs

这样初始化出来的项目包含了基本的配置和src目录,依赖默认有两个

dependencies {
    compile 'org.slf4j:slf4j-api:1.7.5'
    testCompile 'junit:junit:4.11'
}

对于简单的工程而言这样就足够了,方便快捷。但是如果是一个多项目工程就创建不出来了。

从目前Gradle官方的roadmap来说,init模块是会被废弃的,而且之后还会新增不同的工程类型,所以之后可能会增加对于多项目工程的支持,但是目前没有。

所以目前来说简单的办法如下

  1. 建立basic项目
  2. 创建子项目的目录
  3. 进入子项目目录,创建java-library项目
  4. 删除所有子项目中的gradle相关文件
  5. 修改basic项目的settings.gradle,include所有子项目

这样操作虽然很繁琐,但是可以很流畅的工作。

这样创建出来的多项目工程的依赖管理全部依赖于主项目的build.gradle文件,也就是类似这样的写法

project("spring-context") {
	description = "Spring Context"
	apply plugin: "groovy"

	dependencies {
		compile(project(":spring-aop"))
		compile(project(":spring-beans"))
		compile(project(":spring-expression"))
		compile(project(":spring-core"))
		compile(files(project(":spring-core").cglibRepackJar))
		optional(project(":spring-instrument"))
		optional("javax.inject:javax.inject:1")
		optional("javax.annotation:javax.annotation-api:${annotationApiVersion}")
		optional("javax.xml.ws:jaxws-api:${jaxwsVersion}")
		optional("javax.ejb:javax.ejb-api:${ejbApiVersion}")
		optional("javax.interceptor:javax.interceptor-api:${interceptorApiVersion}")
		optional("javax.enterprise.concurrent:javax.enterprise.concurrent-api:1.0")
		optional("javax.money:money-api:1.0")
		optional("org.eclipse.persistence:javax.persistence:${jpaVersion}")
		optional("javax.validation:validation-api:${beanvalVersion}")
		optional("org.hibernate:hibernate-validator:${hibval5Version}")
		optional("joda-time:joda-time:${jodaVersion}")
		optional("org.aspectj:aspectjweaver:${aspectjVersion}")
		optional("org.codehaus.groovy:groovy-all:${groovyVersion}")
		optional("org.beanshell:bsh:2.0b4")
		testCompile("javax.inject:javax.inject-tck:1")
		testCompile("javax.el:javax.el-api:${elApiVersion}")
		testCompile("org.glassfish:javax.el:3.0.1-b08")
		testCompile("org.javamoney:moneta:1.1")
		testCompile("org.apache.commons:commons-pool2:2.4.2")
		testCompile("org.slf4j:slf4j-api:${slf4jVersion}")
		testRuntime("javax.xml.bind:jaxb-api:${jaxbVersion}")
	}
}

当然也可以保留依赖管理在子项目的build.gradle文件中。

本文版权归作者所有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

转载自夜明的孤行灯

本文链接地址: https://www.huangyunkun.com/2016/07/30/gradle-multi-project/

发表评论

电子邮件地址不会被公开。