Spring源码(Gradle管理)转Maven项目

Spring源码(Gradle管理)转Maven项目

背景:项目源码是3.2.x,gradle4.10.2。最开始首先就是替换maven中央仓库为阿里云的中央仓库,其实执行安装的时候一定要用./gradlew install不要用原生的gradle install会有各种问题;最终版脚本地址

一、添加maven插件

首先在build.gradle脚本中添加maven插件

apply plugin: 'java'
apply plugin: 'maven'
apply plugin: 'eclipse'
group = 'org.springframework'
version = '3.2.100-SNAPSHOT'

同时修改gradle.properties的版本号为上述一致就行;此时在根目录运行./gradlew install就会在各个模块下面build目录生成pom-default.xml,现在还不能直接使用,另外打包有点慢,浪费生命,注释掉一些不必要的任务,如下所示:

artifacts {
   
	//archives sourcesJar //打包源码
	//archives javadocJar //打包文档
}

artifacts {
   
	//archives docsZip    //所有文档打包压缩
	//archives schemaZip  //schema压缩
	//archives distZip    //dist
}

二、添加拷贝任务

前面讲到在build目录下生成pom-default.xml,但是因为不在模块根目录下,且名字不叫pom.xml所以不能使用,需要拷贝到根目录下面。可以通过在configure(subprojects - project(":spring-build-src")) { subproject ->下面新增copy任务,两种实现方案:

1、方案一
task copyPomXml(type: Copy, dependsOn: jar){
   
		def fileExist = file("${subproject.buildDir}/poms/pom-default.xml").exists()
		if (!fileExist) {
   
			println("file ${subproject.buildDir}/poms/pom-default.xml not exist!")
		}
		println("from ${subproject.buildDir}/poms/pom-default.xml to ${subproject.projectDir}/pom.xml")
		file("${subproject.buildDir}/poms/pom-default.xml").renameTo(file("${subproject.projectDir}/pom.xml"))
	}
install.dependsOn(copyPomXml)
2、方案二
//必须等到jar生成以后才能执行拷贝,否则pom文件不存在
task copyPomXml2(type: Copy, dependsOn: jar){
   
		//from,to里面一定要使用双引号,否则变量解析不了,
		//而且也没有异常,使用debug模式会告诉你找不到源文件
		from("${subproject.buildDir}/poms")
		include '**/*.xml'
		into file("${subproject.projectDir}/")
		rename {
    filename ->
			filename.replace 'pom-default', 'pom'
		}
		//允许拷贝空目录
		includeEmptyDirs = true
	}
//在最终install任务之前执行,install之前会有各种编译打包任务
install.dependsOn(copyPomXml2) 

至此完成了根目录下pom文件的生成,真是不容易啊,弄了好久,遇到各种莫名其妙的问题,主要是很多异常打的莫名其妙,相对于java等语言,来讲,定位问题的成本真的很高;可是很多事情并没有那么圆满,这样生成的pom缺失一堆依赖项;后面研究使用maven-publish插件参考;参考2

三、通过Gradle发布Jar到远程中央仓库

期间因多次尝试转Maven工程失败,想过Gradle能够直接使用maven中央仓库, 那是否也可以直接上传到maven仓库呢?通过检索有两种方式:maven-publishuploadArchives, 网上也是查了好多,都搞不定,真实醉了,官方文档也只是介绍了单一模块的情况,真的快绝望了,最后发现Gradle的GitHub源码中有示例multiple-publications,按照这个例子,只要在build.gradle最外层增加如下代码:

1、使用maven-publish插件,分开配置
第一步:配置发布的中央仓库地址/登入信息
subprojects {
   
	apply plugin: 'java'
	apply plugin: 'maven-publish'

	repositories {
   
		mavenCentral()
	}

	publishing {
   
		repositories {
   
			maven {
   
				url "填上maven中央仓库地址"
				credentials {
   
					userna
  • 3
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值