赞
踩
背景:项目源码是3.2.x
,gradle
是4.10.2
。最开始首先就是替换maven中央仓库为阿里云的中央仓库,其实执行安装的时候一定要用./gradlew install
不要用原生的gradle install
会有各种问题;最终版脚本地址
首先在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任务,两种实现方案:
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)
//必须等到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
期间因多次尝试转Maven工程失败,想过Gradle能够直接使用maven中央仓库, 那是否也可以直接上传到maven仓库呢?通过检索有两种方式:maven-publish
和uploadArchives
, 网上也是查了好多,都搞不定,真实醉了,官方文档也只是介绍了单一模块的情况,真的快绝望了,最后发现Gradle的GitHub源码中有示例multiple-publications,按照这个例子,只要在build.gradle
最外层增加如下代码:
maven-publish
插件,分开配置subprojects { apply plugin: 'java' apply plugin: 'maven-publish' repositories { mavenCentral() } publishing { repositories { maven { url "填上maven中央仓库地址" credentials { userna
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。