美文网首页
编译spring 源码

编译spring 源码

作者: 疯狂的冰块 | 来源:发表于2017-08-18 23:10 被阅读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

    相关文章

      网友评论

          本文标题:编译spring 源码

          本文链接:https://www.haomeiwen.com/subject/moszrxtx.html