spring: spring5.3.x源码新建模块踩坑日记。

前提:源码导入正常,创建模块出现问题(配置文件名、依赖引入)。

注意版本: spring5.3.x (踩过坑,不同版本问题不一致。。。)

新建完成,使用编写build.gradle引入依赖后 reimport gradle project部分代码爆红(找不到依赖)。

出现场景如下:

新建模块如下结构:
1)源码下载
2)源码导入
(此处不多说,下载、导入、改镜像等网上可以查找到很多spring源码模块教程)。

从新建调试模块开始
项目根目录右键 -> new -> module -> gradle
目录结构如下:
在这里插入图片描述

Application.java

package xyz.niyin.application;

import org.springframework.context.support.AbstractApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import xyz.niyin.bean.HelloWorld;

final class Application {
	private Application(){}

	public static void main(String[] args) {
		//1. 创建 Spring 的 IOC 容器
		AbstractApplicationContext ctx = new ClassPathXmlApplicationContext("applicationContext.xml");
		//2. 从 IOC 容器中获取 bean 的实例
		HelloWorld helloWorld = ctx.getBean(HelloWorld.class);
		// 根据类型来获取 bean 的实例: 要求在  IOC 容器中只有一个与之类型匹配的 bean, 若有多个则会抛出异常.
		// 一般情况下, 该方法可用, 因为一般情况下, 在一个 IOC 容器中一个类型对应的 bean 也只有一个.
		// HelloWorld helloWorld1 = ctx.getBean(HelloWorld.class);
		//3. 使用 bean
		helloWorld.hello();
	}
}

HelloWorld.java

package xyz.niyin.bean;

public class HelloWorld {
	private String user;

	public HelloWorld() {
		System.out.println("HelloWorld's constructor...");
	}

	public void setUser(String user) {
		System.out.println("setUser:" + user);
		this.user = user;
	}

	public HelloWorld(String user) {
		this.user = user;
	}

	public void hello(){
		System.out.println("Hello: " + this.user);
	}

}

applicationContext.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
	   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	   xsi:schemaLocation="http://www.springframework.org/schema/beans https://www.springframework.org/schema/beans/spring-beans.xsd">

	<!-- 配置一个 bean -->
	<bean id="helloWorld" class="xyz.niyin.bean.HelloWorld">
		<!-- 为属性赋值 -->
		<property name="user" value="Jerry"></property>
	</bean>
</beans>

build.gradle (新建原始状态,注意配置文件名。。坑。。坑。。坑。。,后面有说)

plugins {
    id 'java'
}

group 'org.springframework'
version '5.3.21-SNAPSHOT'

repositories {
    mavenCentral()
}

dependencies {
    testCompile group: 'junit', name: 'junit', version: '4.12'
}

根据网上很多教程( build.gradle 引入依赖):(注意配置实则不是以下这样,坑。。坑。。坑。。。后面有解释)

// add dependencies
dependencies {
    compile(project(":spring-beans"))
    compile(project(":spring-context"))
    testCompile group: 'junit', name: 'junit', version: '4.12'
}

当实启动类Application、实体类Helloworld、xml文件,build.gradle依赖成功引入。
好了,当你觉得大功告成, reimport gradle project等待构建成功。
此时,熟悉的红字报错出现了(坑出现了,当我找了很多很多网上的述说都已经结束了)。
经过一次次的尝试,把问题解决了,做一下记录,避免再次踩坑。

注意: 针对spring5.3.x源码版本。(踩过坑,拿别的版本方案放到5.3,希望其他版本的不要照搬,可做参考)
1)注意点1
新建项目时配置文件默认为build.gradle(其他版应该不会报错)。
在5.3.x版本,项目编译能通过,但是,当使用依赖项时爆红。
在这里插入图片描述
原因:.gradle前缀需要与模块名一致,如下模块名为spring-ny,配置文件名需为spring-ny.gradle(而不是默认的build.gradle),此处需要修改。
在这里插入图片描述
2)注意点2
当你修改完编译,依然还有问题等着(●’◡’●)。。。。
根据网上很多教程的方法引入依赖如下:
当你查看了很多篇文章,很多个教程,都是如此,没毛病,都是这样,应该没问题,肯定是别的问题,疯狂找,重新创建项目等一顿操作,还是错错错。。。。(注意配置不是以下这样)

// add dependencies
dependencies {
    compile(project(":spring-beans"))
    compile(project(":spring-context"))
    testCompile group: 'junit', name: 'junit', version: '4.12'
}

还好,问题找到了:
原来新版本关键字做了替换

使用implementation、api, 代替compile ,

testImplementation 代替testCompile

androidTestImplementation 代替 androidTestCompile

所以,配置文件不是前面这么写,而是使用api、testImplementation等新替代的词(又是踩了还多次坑各种尝试查找才发现问题)。

正确配置如下:即原来的compile需要使用api替代。

plugins {
    id 'java'
}

group 'org.springframework'
version '5.3.21-SNAPSHOT'

repositories {
    mavenCentral()
}

dependencies {
    api(project(":spring-context"))
    api(group: 'junit', name: 'junit', version: '4.12')
}

好了,折腾了好久,到此处终于在spring源码中创建了一个自己的模块。
再提醒一次,此处针对spring5.3.x源码版本,具体版本请勿照搬,且此处只记录了一种解决方案,并不代表最优方案。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值