V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
ukipoi
V2EX  ›  Java

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

  •  
  •   ukipoi · 2018-11-13 16:54:16 +08:00 · 3422 次点击
    这是一个创建于 2234 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

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

    如果不止一个包有这样的问题,就重复做几次把所有出问题的包都处理了
    honeycomb
        11
    honeycomb  
       2018-11-13 20:56:48 +08:00 via Android
    @ukipoi 另外可以尝试一下 maven central 库的镜像,比如阿里云之类的
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5639 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 36ms · UTC 03:16 · PVG 11:16 · LAX 19:16 · JFK 22:16
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.