为什么 IDEA 使用 Spring Initializr 创建一个项目使用 Maven 可以正常启动,用 Gradle 就报错呢?

2018-11-13 16:54:16 +08:00
 ukipoi

Maven:3.6
Gradle:4.10.2
依赖列表

Core:
    DevTools
    Security
    Lombok
    Session
    Cache
Web:
    Web
SQL:
    MySQL
    JDBC
    MyBatis
NoSQL:
    Redis

Alibaba:
    Druid

配置文件 application.properties

# db
spring.datasource.type=com.alibaba.druid.pool.DruidDataSource
spring.datasource.driverClassName=com.mysql.jdbc.Driver
spring.datasource.url=jdbc:mysql://localhost:3306/[dbname]
spring.datasource.username=root
spring.datasource.password=[password]

server.port=8081

# REDIS
spring.redis.host=localhost
spring.redis.port=6379

都在启动类前加了注解

@EnableRedisHttpSession(redisNamespace="ukipoi")

创建了项目后我就没添加过其他文件了
但是使用 Gradle 就会报错

ERROR StatusLogger Log4j2 could not find a logging implementation. Please add log4j-core to the classpath. Using SimpleLogger to log to the console...
Exception in thread "restartedMain" java.lang.reflect.InvocationTargetException
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.lang.reflect.Method.invoke(Method.java:498)
	at org.springframework.boot.devtools.restart.RestartLauncher.run(RestartLauncher.java:49)
Caused by: java.lang.NoClassDefFoundError: ch/qos/logback/classic/turbo/TurboFilter

而 Maven 的项目可以正常启动,请问这是为什么呀? Gradle 依赖的包和 Maven 是不一样的吗?

下面是很长的 build.gradle 和 pom.xml
build.gradle

buildscript {
	ext {
		springBootVersion = '2.1.0.RELEASE'
	}
	repositories {
		mavenCentral()
	}
	dependencies {
		classpath("org.springframework.boot:spring-boot-gradle-plugin:${springBootVersion}")
	}
}

apply plugin: 'java'
apply plugin: 'eclipse'
apply plugin: 'org.springframework.boot'
apply plugin: 'io.spring.dependency-management'

group = 'com.example'
version = '0.0.1-SNAPSHOT'
sourceCompatibility = 1.8

repositories {
	mavenCentral()
}


dependencies {
	implementation('org.springframework.boot:spring-boot-starter-cache')
	implementation('org.springframework.boot:spring-boot-starter-data-redis')
	implementation('org.springframework.boot:spring-boot-starter-security')
	implementation('org.springframework.boot:spring-boot-starter-web')
	implementation('org.mybatis.spring.boot:mybatis-spring-boot-starter:1.3.2')
	implementation('org.springframework.session:spring-session-data-redis')
	runtimeOnly('org.springframework.boot:spring-boot-devtools')
	runtimeOnly('mysql:mysql-connector-java')
	compileOnly('org.projectlombok:lombok')
	testImplementation('org.springframework.boot:spring-boot-starter-test')
	testImplementation('org.springframework.security:spring-security-test')
	/* 通用依赖 */
	// https://mvnrepository.com/artifact/com.alibaba/druid
	compile group: 'com.alibaba', name: 'druid', version: '1.1.12'
}

pom.xml

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
	<modelVersion>4.0.0</modelVersion>

	<groupId>com.example</groupId>
	<artifactId>demo</artifactId>
	<version>0.0.1-SNAPSHOT</version>
	<packaging>jar</packaging>

	<name>demo</name>
	<description>Demo project for Spring Boot</description>

	<parent>
		<groupId>org.springframework.boot</groupId>
		<artifactId>spring-boot-starter-parent</artifactId>
		<version>2.1.0.RELEASE</version>
		<relativePath/> <!-- lookup parent from repository -->
	</parent>

	<properties>
		<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
		<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
		<java.version>1.8</java.version>
	</properties>

	<dependencies>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-cache</artifactId>
		</dependency>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-data-redis</artifactId>
		</dependency>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-security</artifactId>
		</dependency>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-web</artifactId>
		</dependency>
		<dependency>
			<groupId>org.mybatis.spring.boot</groupId>
			<artifactId>mybatis-spring-boot-starter</artifactId>
			<version>1.3.2</version>
		</dependency>
		<dependency>
			<groupId>org.springframework.session</groupId>
			<artifactId>spring-session-data-redis</artifactId>
		</dependency>

		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-devtools</artifactId>
			<scope>runtime</scope>
		</dependency>
		<dependency>
			<groupId>mysql</groupId>
			<artifactId>mysql-connector-java</artifactId>
			<scope>runtime</scope>
		</dependency>
		<dependency>
			<groupId>org.projectlombok</groupId>
			<artifactId>lombok</artifactId>
			<optional>true</optional>
		</dependency>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-test</artifactId>
			<scope>test</scope>
		</dependency>
		<dependency>
			<groupId>org.springframework.security</groupId>
			<artifactId>spring-security-test</artifactId>
			<scope>test</scope>
		</dependency>
		<!-- 通用依赖 -->
		<!-- https://mvnrepository.com/artifact/com.alibaba/druid -->
		<dependency>
			<groupId>com.alibaba</groupId>
			<artifactId>druid</artifactId>
			<version>1.1.12</version>
		</dependency>

	</dependencies>

	<build>
		<plugins>
			<plugin>
				<groupId>org.springframework.boot</groupId>
				<artifactId>spring-boot-maven-plugin</artifactId>
			</plugin>
		</plugins>
	</build>


</project>
3410 次点击
所在节点    Java
11 条回复
gaius
2018-11-13 17:01:54 +08:00
logback 两个包的版本问题吧。婆姨
wleexi
2018-11-13 17:05:38 +08:00
为什么不用
http://start.spring.io
ukipoi
2018-11-13 17:15:06 +08:00
@wleexi
IDEA 上的和 start.spring.io 应该是一样的呀
特意去试了一下还是报错
wleexi
2018-11-13 17:16:04 +08:00
这样的啊。。我用是社区班 可能没这个功能吧。
luozic
2018-11-13 17:23:29 +08:00
Please add log4j-core to the classpath 这错误码不是写了么?
ukipoi
2018-11-13 17:29:41 +08:00
@luozic
我添加了 log4j-core 还是会报错。
我的意思是 gradle 是不是比 maven 的方式少导入一些包。
Jonz
2018-11-13 17:38:15 +08:00
重新加载一下 gradle 看下是不是没有自动下载下来
ukipoi
2018-11-13 17:39:03 +08:00
好像是下载有问题。
我用远程服务器创建就没有问题。
。。。。。。。
luozic
2018-11-13 19:14:55 +08:00
源地址改改
honeycomb
2018-11-13 20:56:03 +08:00
@ukipoi 排查起来时,相比 maven 没有下载到正确的包来说要繁琐一些(因为 maven 在本地那个.m2 缓存目录的结构比 gradle 的简单一些),但大致方法应该一致:

在 IDE 的 library 引用里去找 logback 的 jar 包,找到那个文件以后连着目录删掉,回头再运行一次 gradle refresh。

如果不止一个包有这样的问题,就重复做几次把所有出问题的包都处理了
honeycomb
2018-11-13 20:56:48 +08:00
@ukipoi 另外可以尝试一下 maven central 库的镜像,比如阿里云之类的

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/507467

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX