编译spring源码问题总结

2020-02-15 15:15
882
0
把昨天编译spring源码所遇到的坑记录下来,以防下次继续采坑。
 
一、资源地址
gradle各版本下载地址:
https://services.gradle.org/distributions/
spring的GitHub地址:
https://github.com/spring-projects/spring-framework
spring5.2.3下载地址:
https://codeload.github.com/spring-projects/spring-framework/zip/v5.2.3.RELEASE
 
二、编译遇到的问题
      我下载的是spring-framework-5.2.3源码,编译器用的idea 2018版本,gradle用的5.6.4。然后问题出来了,一直编译不通过,报各种错误。
直接说解决重点:idea编译器要用2019版本,gradle用5.6.4没问题,gradle网上都说用4.X的版本(在这里5.6.4的版本能编译通过,其他版本有的会报错,没有全部试)
 
三、把spring工程由gradle项目转换为maven项目
 
将以下配置修改下参数,添加到所有模块的gradle配置文件中。
apply plugin: 'maven'
 
group = 'com.company.root'
// artifactId is taken by default, from folder name
version = '0.0.1-SNAPSHOT'
 
task writeNewPom << {
    pom {
        project {
            inceptionYear '2014'
            licenses {
                license {
                    name 'The Apache Software License, Version 2.0'
                    url 'http://www.apache.org/licenses/LICENSE-2.0.txt'
                    distribution 'repo'
                }
            }
        }
    }.writeTo("pom.xml")
}
然后进入项目路径执行 :gradle writeNewPom
pom.xml会生成在项目根目录。
但这种方式还算问题多多,1、很多依赖没有导出版本号。2、还算有依赖缺失。
 
四、发现第三点导出的包还是不全,还有各种依赖问题。
找到一个笨办法,如下:
通过gradle编译好的项目中的External Libraries,直接选中全部的依赖,然后复制粘贴到txt文件中,里面的显示正好包含了maven依赖的groupId、artifactId、version信息,因此就编写了个代码,用正则(Gradle:\s*(.*?):(.*?):(.*?)[\s|$])把粘贴到txt里的maven依赖信息都提取出来,按如下格式注入拼装在一起。最后改了几个问题后,可以正常编译通过了。
但是这里有个问题还没解决:所有模块的依赖都放在一起了,显得冗余。解决思路:能否找到idea中对各模块依赖记录的文件,然后从这文件中把各模块依赖导出。
String temp = "        <dependency>\n" +
                "            <groupId>{groupId}</groupId>\n" +
                "            <artifactId>{artifactId}</artifactId>\n" +
                "            <version>{version}</version>\n" +
                "        </dependency>\n";
 

全部评论