赞
踩
下载spring源码。通过idea直接打开,如果有build直接关掉build,因为在没改配置前,build会失败
打开文件gradle-wrapper.properties
,可以查看spring版本需要的gradle版本
下载对应的gradle版本,并安装,安装教程很多,本文不在描述,本文spring版本对应的gradle版本为Gradle 4.3.1
在根目录下找到build.gradle
文件,全局搜下这个configurations.all,把整个都注释掉然后加上阿里云的库,不然你打完王者都还没结束
// configurations.all {
// // Check for updates every build
// resolutionStrategy.cacheChangingModulesFor 0, 'seconds'
// }
allprojects {
repositories {
maven{ url 'http://maven.aliyun.com/nexus/content/groups/public'}
}
}
保存好,build下,等几分钟就好了
完整的build.gradle
文件
buildscript { repositories { maven { url "https://repo.spring.io/plugins-release" } } dependencies { classpath("io.spring.gradle:propdeps-plugin:0.0.8") classpath("io.spring.gradle:docbook-reference-plugin:0.3.1") classpath("org.asciidoctor:asciidoctorj-pdf:1.5.0-alpha.16") classpath("org.asciidoctor:asciidoctorj-epub3:1.5.0-alpha.7") } } // 3rd party plugin repositories can be configured in settings.gradle plugins { id "com.gradle.build-scan" version "1.8" id "io.spring.dependency-management" version "1.0.3.RELEASE" apply false id "org.jetbrains.kotlin.jvm" version "1.1.61" apply false id "org.jetbrains.dokka" version "0.9.17" id "org.asciidoctor.convert" version "1.5.6" } buildScan { licenseAgreementUrl = 'https://gradle.com/terms-of-service' licenseAgree = 'yes' } ext { linkHomepage = 'https://projects.spring.io/spring-framework' linkCi = 'https://build.spring.io/browse/SPR' linkIssue = 'https://jira.spring.io/browse/SPR' linkScmUrl = 'https://github.com/spring-projects/spring-framework' linkScmConnection = 'scm:git:git://github.com/spring-projects/spring-framework.git' linkScmDevConnection = 'scm:git:ssh://git@github.com:spring-projects/spring-framework.git' moduleProjects = subprojects.findAll { !it.name.equals('spring-build-src') && !it.name.equals('spring-framework-bom') } } configure(allprojects) { project -> group = "org.springframework" version = qualifyVersionIfNecessary(version) ext.aspectjVersion = "1.8.13" ext.freemarkerVersion = "2.3.27-incubating" ext.groovyVersion = "2.4.13" ext.hsqldbVersion = "2.4.0" ext.jackson2Version = "2.9.2" ext.jettyVersion = "9.4.7.v20170914" ext.junitJupiterVersion = "5.0.2" ext.junitPlatformVersion = "1.0.2" ext.junitVintageVersion = "4.12.2" ext.kotlinVersion = "1.1.61" ext.log4jVersion = "2.10.0" ext.nettyVersion = "4.1.17.Final" ext.reactorVersion = "Bismuth-SR4" ext.rxjavaVersion = "1.3.4" ext.rxjavaAdapterVersion = "1.2.1" ext.rxjava2Version = "2.1.6" ext.slf4jVersion = "1.7.25" ext.tiles3Version = "3.0.8" ext.tomcatVersion = "8.5.23" ext.undertowVersion = "1.4.21.Final" ext.gradleScriptDir = "${rootProject.projectDir}/gradle" apply plugin: "propdeps" apply plugin: "java" apply plugin: "test-source-set-dependencies" apply from: "${gradleScriptDir}/ide.gradle" apply plugin: "kotlin" compileKotlin { kotlinOptions.jvmTarget = "1.8" kotlinOptions.freeCompilerArgs = ["-Xskip-runtime-version-check", "-Xjsr305=strict"] } compileTestKotlin { kotlinOptions.jvmTarget = "1.8" kotlinOptions.freeCompilerArgs = ["-Xskip-runtime-version-check", "-Xjsr305=strict"] } // configurations.all { // // Check for updates every build // resolutionStrategy.cacheChangingModulesFor 0, 'seconds' // } allprojects { repositories { maven{ url 'http://maven.aliyun.com/nexus/content/groups/public'} } } def commonCompilerArgs = ["-Xlint:serial", "-Xlint:cast", "-Xlint:classfile", "-Xlint:dep-ann", "-Xlint:divzero", "-Xlint:empty", "-Xlint:finally", "-Xlint:overrides", "-Xlint:path", "-Xlint:processing", "-Xlint:static", "-Xlint:try", "-Xlint:-options"] compileJava.options*.compilerArgs = commonCompilerArgs + ["-Xlint:varargs", "-Xlint:fallthrough", "-Xlint:rawtypes", "-Xlint:deprecation", "-Xlint:unchecked", "-Werror"] compileTestJava.options*.compilerArgs = commonCompilerArgs + ["-Xlint:-varargs", "-Xlint:-fallthrough","-Xlint:-rawtypes", "-Xlint:-deprecation", "-Xlint:-unchecked"] compileJava { sourceCompatibility = 1.8 targetCompatibility = 1.8 options.encoding = 'UTF-8' } compileTestJava { sourceCompatibility = 1.8 targetCompatibility = 1.8 options.encoding = 'UTF-8' options.compilerArgs += "-parameters" } test { systemProperty("java.awt.headless", "true") systemProperty("testGroups", project.properties.get("testGroups")) scanForTestClasses = false include(["**/*Tests.class", "**/*Test.class"]) // Since we set scanForTestClasses to false, we need to filter out inner // classes with the "$" pattern; otherwise, using -Dtest.single=MyTests to // run MyTests by itself will fail if MyTests contains any inner classes. exclude(["**/Abstract*.class", '**/*$*']) reports.junitXml.setDestination(file("$buildDir/test-results")) } repositories { maven { url "https://repo.spring.io/libs-release" } maven { url "https://repo.spring.io/milestone" } // for AspectJ 1.9 beta } dependencies { testCompile("junit:junit:4.12") { exclude group:'org.hamcrest', module:'hamcrest-core' } testCompile("org.mockito:mockito-core:2.12.0") { exclude group:'org.hamcrest', module:'hamcrest-core' } testCompile("com.nhaarman:mockito-kotlin:1.5.0") { exclude module:'kotlin-stdlib' exclude module:'kotlin-reflect' exclude module:'mockito-core' } testCompile("org.hamcrest:hamcrest-all:1.3") testCompile("org.xmlunit:xmlunit-matchers:2.3.0") testRuntime("org.apache.logging.log4j:log4j-core:${log4jVersion}") // JSR-305 only used for non-required meta-annotations compileOnly("com.google.code.findbugs:jsr305:3.0.2") testCompileOnly("com.google.code.findbugs:jsr305:3.0.2") } ext.javadocLinks = [ "http://docs.oracle.com/javase/8/docs/api/", "http://docs.oracle.com/javaee/7/api/", "http://docs.oracle.com/cd/E13222_01/wls/docs90/javadocs/", // CommonJ "http://pic.dhe.ibm.com/infocenter/wasinfo/v7r0/topic/com.ibm.websphere.javadoc.doc/web/apidocs/", "http://glassfish.java.net/nonav/docs/v3/api/", "http://docs.jboss.org/jbossas/javadoc/4.0.5/connector/", "http://docs.jboss.org/jbossas/javadoc/7.1.2.Final/", "http://tiles.apache.org/tiles-request/apidocs/", "http://tiles.apache.org/framework/apidocs/", "http://www.eclipse.org/aspectj/doc/released/aspectj5rt-api/", "http://ehcache.org/apidocs/2.10.4", "http://quartz-scheduler.org/api/2.2.1/", "http://fasterxml.github.io/jackson-core/javadoc/2.8/", "http://fasterxml.github.io/jackson-databind/javadoc/2.8/", "http://fasterxml.github.io/jackson-dataformat-xml/javadoc/2.8/", "http://hc.apache.org/httpcomponents-client-ga/httpclient/apidocs/" ] as String[] } configure(subprojects - project(":spring-build-src")) { subproject -> apply from: "${gradleScriptDir}/publish-maven.gradle" jar { manifest.attributes["Implementation-Title"] = subproject.name manifest.attributes["Implementation-Version"] = subproject.version manifest.attributes["Automatic-Module-Name"] = subproject.name.replace('-', '.') // for Jigsaw manifest.attributes["Created-By"] = "${System.getProperty("java.version")} (${System.getProperty("java.specification.vendor")})" from("${rootProject.projectDir}/src/dist") { include "license.txt" include "notice.txt" into "META-INF" expand(copyright: new Date().format("yyyy"), version: project.version) } } javadoc { description = "Generates project-level javadoc for use in -javadoc jar" options.memberLevel = org.gradle.external.javadoc.JavadocMemberLevel.PROTECTED options.author = true options.header = project.name options.use = true options.links(project.ext.javadocLinks) options.addStringOption('Xdoclint:none', '-quiet') // Suppress warnings due to cross-module @see and @link references. // Note that global 'api' task does display all warnings. logging.captureStandardError LogLevel.INFO logging.captureStandardOutput LogLevel.INFO // suppress "## warnings" message } task sourcesJar(type: Jar, dependsOn: classes) { duplicatesStrategy = DuplicatesStrategy.EXCLUDE classifier = 'sources' from sourceSets.main.allSource // Don't include or exclude anything explicitly by default. See SPR-12085. } task javadocJar(type: Jar) { classifier = "javadoc" from javadoc } artifacts { archives sourcesJar archives javadocJar } } configure(rootProject) { description = "Spring Framework" apply plugin: "groovy" apply plugin: "io.spring.dependency-management" apply from: "${gradleScriptDir}/jdiff.gradle" apply from: "${gradleScriptDir}/docs.gradle" dependencyManagement { imports { mavenBom "io.projectreactor:reactor-bom:${reactorVersion}" } resolutionStrategy { cacheChangingModulesFor 0, 'seconds' } applyMavenExclusions = false } // don't publish the default jar for the root project configurations.archives.artifacts.clear() dependencies { // for integration tests testCompile(project(":spring-aop")) testCompile(project(":spring-beans")) testCompile(project(":spring-context")) testCompile(project(":spring-core")) testCompile(project(":spring-expression")) testCompile(project(":spring-jdbc")) testCompile(project(":spring-orm")) testCompile(project(":spring-test")) testCompile(project(":spring-tx")) testCompile(project(":spring-web")) testCompile("javax.inject:javax.inject:1") testCompile("javax.resource:javax.resource-api:1.7") testCompile("javax.servlet:javax.servlet-api:3.1.0") testCompile("org.aspectj:aspectjweaver:${aspectjVersion}") testCompile("org.hsqldb:hsqldb:${hsqldbVersion}") testCompile("org.hibernate:hibernate-core:5.1.10.Final") } artifacts { archives docsZip archives schemaZip archives distZip } task wrapper(type: Wrapper) { description = "Generates gradlew[.bat] scripts" gradleVersion = '4.3.1' doLast() { def gradleOpts = "-XX:MaxMetaspaceSize=1024m -Xmx1024m" def gradleBatOpts = "$gradleOpts -XX:MaxHeapSize=256m" File wrapperFile = file("gradlew") wrapperFile.text = wrapperFile.text.replace("DEFAULT_JVM_OPTS=", "GRADLE_OPTS=\"$gradleOpts \$GRADLE_OPTS\"\nDEFAULT_JVM_OPTS=") File wrapperBatFile = file("gradlew.bat") wrapperBatFile.text = wrapperBatFile.text.replace("set DEFAULT_JVM_OPTS=", "set GRADLE_OPTS=$gradleBatOpts %GRADLE_OPTS%\nset DEFAULT_JVM_OPTS=") } } } /* * Support publication of artifacts versioned by topic branch. * CI builds supply `-P BRANCH_NAME=<TOPIC>` to gradle at build time. * If <TOPIC> starts with 'SPR-', change version * from BUILD-SNAPSHOT => <TOPIC>-SNAPSHOT * e.g. 3.2.1.BUILD-SNAPSHOT => 3.2.1.SPR-1234-SNAPSHOT */ def qualifyVersionIfNecessary(version) { if (rootProject.hasProperty("BRANCH_NAME")) { def qualifier = rootProject.getProperty("BRANCH_NAME") if (qualifier.startsWith("SPR-")) { return version.replace('BUILD', qualifier) } } return version }
3、新增module,并测试构建是否成功
步骤:【File】->【New】->【Module…】 在Spring中添加自己的module模块,同样选择gradle构建
新建user类
package com.zx; public class User { private Integer id; private String name; public User(Integer id, String name) { this.id = id; this.name = name; } public Integer getId() { return id; } public void setId(Integer id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } @Override public String toString() { return "User{" + "id=" + id + ", name='" + name + '\'' + '}'; } }
添加配置类
package com.zx; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.ComponentScan; import org.springframework.context.annotation.Configuration; @Configuration @ComponentScan public class MyConfig { @Bean public User user() { return new User(1, "zx"); } }
添加测试类
package com.zx;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
public class Demo {
public static void main(String[] args) {
AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(MyConfig.class);
User user = (User) context.getBean("user");
System.out.println(user);
}
}
运行结果
到这里,恭喜你,spring源码编译成功,子模块构建成功,可以开始搞你想搞的事情了
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。