编译spring 源码

2017-08-18  本文已影响261人  疯狂的冰块

深入研究spring 必然少不了研究源码。
首先便是编译源码。源代码地址:https://github.com/spring-projects/spring-framework
将分支切换到稳定版本4.3.x分支,这样做是因为稳定版本出现的bug几率较小。

下面几个是编译安装的命令。

./gradlew install
./gradlew build 

将spring 项目转为idea项目,具体可以参考目录下import-into-idea.md文件:

./gradlew cleanIdea

问题1:

 FAILURE: Build failed with an exception.
 
* What went wrong:
Execution failed for task ':referencePdf'.
> [Java ](http://lib.csdn.net/base/java)heap space ...

看下错误日志,原来是内存溢出,需要调整 gradlew.bat文件中的 MaxHeapSize 的大小
set GRADLE_OPTS=-XX:MaxPermSize=512m -Xmx512m -XX:MaxHeapSize=512m %GRADLE_OPTS%

原文地址:http://306963591.iteye.com/blog/1677405

问题2:

FAILURE: Build failed with an exception.

* What went wrong:
Failed to capture snapshot of input files for task 'distZip' during up-to-date check.
> java.io.FileNotFoundException: F:\study\spring-framework\build\distributions\spring-framework-4.3.11.BUILD-SNAPSHOT-schema.zip (The system cannot find the file specified)...

出现这个错误是因为windowns路径上的原因,我在ubuntu没有遇到这个问题。

运行在windows上需要修改build.gradle文件的两处,用注释给出,如下:

task schemaZip(type: Zip) {
        group = "Distribution"
        baseName = "spring-framework"
        classifier = "schema"
        description = "Builds -${classifier} archive containing all " +
            "XSDs for deployment at http://springframework.org/schema."
        duplicatesStrategy 'exclude'
        moduleProjects.each { subproject ->
            def Properties schemas = new Properties();

            subproject.sourceSets.main.resources.find {
                it.path.endsWith("META-INF/spring.schemas")
            }?.withInputStream { schemas.load(it) }

            for (def key : schemas.keySet()) {
                def shortName = key.replaceAll(/http.*schema.(.*).spring-.*/, '$1')
                assert shortName != key
                File xsdFile = subproject.sourceSets.main.resources.find {
                
                    it.path.endsWith(schemas.get(key))
                }
                assert xsdFile != null
                into (shortName) {
                    from xsdFile.path
                }
            }
        }
    }

替换成:

task schemaZip(type: Zip) {
        group = "Distribution"
        baseName = "spring-framework"
        classifier = "schema"
        description = "Builds -${classifier} archive containing all " +
            "XSDs for deployment at http://springframework.org/schema."
        duplicatesStrategy 'exclude'
        moduleProjects.each { subproject ->
            def Properties schemas = new Properties();

            subproject.sourceSets.main.resources.find {
            //这的路径需要改为\\
                it.path.endsWith("META-INF\\spring.schemas")
            }?.withInputStream { schemas.load(it) }

            for (def key : schemas.keySet()) {
                def shortName = key.replaceAll(/http.*schema.(.*).spring-.*/, '$1')
                assert shortName != key
                File xsdFile = subproject.sourceSets.main.resources.find {
                    //这里需要进行路径替换
                    it.path.endsWith(schemas.get(key).replaceAll('\\/','\\\\'))
                }
                assert xsdFile != null
                into (shortName) {
                    from xsdFile.path
                }
            }
        }
    }

3、问题3

org.springframework.ui.jasperreports.JasperReportsUtilsTests > renderAsCsvWithDataSource FAILED
    java.lang.AssertionError at JasperReportsUtilsTests.java:206

org.springframework.ui.jasperreports.JasperReportsUtilsTests > renderAsXlsWithCollection FAILED
    org.junit.ComparisonFailure at JasperReportsUtilsTests.java:231

org.springframework.ui.jasperreports.JasperReportsUtilsTests > renderAsXlsWithExporterParameters FAILED
    org.junit.ComparisonFailure at JasperReportsUtilsTests.java:231

360 tests completed, 3 failed, 13 skipped
:spring-context-support:test FAILED

FAILURE: Build failed with an exception.

* What went wrong:
Execution failed for task ':spring-context-support:test'.
> There were failing tests. See the report at: file:///F:/study/spring-framework/spring-context-support/build/reports/tests/index.html

这个问题也是在windows中遇到的,所以建议编译spring源码最好在liunx中,IDE最好用intellij idea ,
我的解决方案是,直接@Ignore遇到的这几个方法。

写作不易,最后展现一下成果吧,哈哈,算是自我鼓励:

image.png
上一篇下一篇

猜你喜欢

热点阅读