2017-08-31 69 views
1

我在运行SpringBoot项目中的测试时遇到了一些问题。SpringBoot测试模块不会在正确的类路径中搜索log4j2配置

项目结构如下:

Project Structure Image

我就可以开始没有问题resourceService,但如果我连试运行SpringBoot项目的标准测试.....

package com.pcsystem; 

import org.junit.Test; 
import org.junit.runner.RunWith; 
import org.springframework.boot.test.context.SpringBootTest; 
import org.springframework.test.context.junit4.SpringRunner; 

@RunWith(SpringRunner.class) 
@SpringBootTest 
public class ResourceserviceApplicationTests { 

    @Test 
    public void contextLoads() { 
    } 

} 

这个错误的程序响应:

Logging system failed to initialize using configuration from 'resourceservice/log4j2.xml' 
java.io.FileNotFoundException: C:\java\IntelliJ_projects\baseprojectoauth2\resourceservice\resourceservice\log4j2.xml (Unable to find the specified classpath) 

于是,我就特定财产

logging.config=resourceservice/log4j2.xml 

改变application.properties到

logging.config=log4j2.xml 

变更后我注意到,resourceserviceApplication不会启动,因为它无法找到log4j2.xml :

Logging system failed to initialize using configuration from 'log4j2.xml' 
java.io.FileNotFoundException: C:\java\IntelliJ_projects\baseprojectoauth2\log4j2.xml (Unable to find the specified classpath) 

我试过用很多方法解决并做了大量的研究,但此刻我仍然停留在这里。

有什么想法?

PS:似乎Authorizationservice模块不会遭受同样的问题,而仅仅是因为我还没有设置logging.config财产Authorizationservice的application.properties(没有必要现在)

提前致谢,祝您有美好的一天。

-UPDATE 1-

配置文件是关于所有resourceService模块,所以就像你说的Kostiantyn(你响应感谢)我已经做了,但问题仍然存在。

实际情况:

Project structure after your reply

现在resourceServiceApplication将无法启动,他说:

Logging system failed to initialize using configuration from 'log4j2.xml' 
java.io.FileNotFoundException: C:\java\IntelliJ_projects\baseprojectoauth2\log4j2.xml 

和contextLoads()从测试封装方法说:

java.io.FileNotFoundException: C:\java\IntelliJ_projects\baseprojectoauth2\resourceservice\log4j2.xml 

让我给你看配置文件:

server.port=8888 

logging.config=log4j2.xml 

spring.data.mongodb.host=localhost 
spring.data.mongodb.database=jogging 
#spring.data.mongodb.username=admin 
#spring.data.mongodb.password=pass 
spring.data.mongodb.port=27017 

由于从user1615664要求,下面你可以看到我的gradle这个文件 (这是关于resourceService模块gradle这个文件; AuthorizationService有一个特定的文件的gradle,最后有 根gradle这个文件,我会告诉你在这个更新结束)

Exscuse我为lenght,我使用了大量的库在这里。

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

apply plugin: 'java' 
apply plugin: 'eclipse' 
apply plugin: 'org.springframework.boot' 

version = '0.0.1-SNAPSHOT' 
sourceCompatibility = 1.8 

repositories { 
    mavenCentral() 
} 

configurations { 
    compile.exclude group:'ch.qos.logback' 
} 

dependencies { 


    compile('org.springframework.boot:spring-boot-starter-data-mongodb') 
    compile('org.springframework.boot:spring-boot-starter-security') 

    compile('org.springframework.boot:spring-boot-starter-web') { 
     exclude group: 'org.springframework.boot', module: 'spring-boot-starter-logging' 
     exclude module: "logback-classic" 
    } 
    compile('org.springframework.boot:spring-boot-starter-log4j2') 

    compile group: 'org.apache.tika', name: 'tika', version: '1.16', ext: 'pom' 
    compile group: 'org.apache.tika', name: 'tika-parsers', version: '1.16' 
    compileOnly('org.projectlombok:lombok') 

    compile("org.springframework.boot:spring-boot-starter-actuator") 


    //compile project(':authorizationservice') 
    // https://mvnrepository.com/artifact/org.springframework.hateoas/spring-hateoas 
    compile group: 'org.springframework.hateoas', name: 'spring-hateoas', version: '0.23.0.RELEASE' 
    // https://mvnrepository.com/artifact/org.springframework.security.oauth/spring-security-oauth2 
    // https://mvnrepository.com/artifact/org.apache.commons/commons-lang3 
    compile group: 'org.apache.commons', name: 'commons-lang3', version: '3.6' 
    compile group: 'org.springframework.security.oauth', name: 'spring-security-oauth2', version: '2.1.1.RELEASE' 
    compile group: 'org.springframework.security', name: 'spring-security-jwt', version: '1.0.8.RELEASE' 

    // https://mvnrepository.com/artifact/org.apache.axis/axis 
    compile group: 'org.apache.axis', name: 'axis', version: '1.4' 
    // https://mvnrepository.com/artifact/axis/axis-jaxrpc 
    compile group: 'axis', name: 'axis-jaxrpc', version: '1.4' 

    // https://mvnrepository.com/artifact/commons-discovery/commons-discovery 
    compile group: 'commons-discovery', name: 'commons-discovery', version: '0.5' 
    // https://mvnrepository.com/artifact/org.slf4j/slf4j-api 

    // https://mvnrepository.com/artifact/javax.xml/jaxrpc-api 
    compile group: 'javax.xml', name: 'jaxrpc-api', version: '1.1.1' 

    // https://mvnrepository.com/artifact/org.apache.xmlrpc/xmlrpc 
    compile group: 'org.apache.xmlrpc', name: 'xmlrpc', version: '3.1.3', ext: 'pom' 
    // https://mvnrepository.com/artifact/javax.activation/activation 
    compile group: 'javax.activation', name: 'activation', version: '1.1.1' 
    // https://mvnrepository.com/artifact/javax.mail/mail 
    compile group: 'javax.mail', name: 'mail', version: '1.4.7' 
    // https://mvnrepository.com/artifact/wsdl4j/wsdl4j 
    compile group: 'wsdl4j', name: 'wsdl4j', version: '1.6.3' 



    testCompile('org.springframework.boot:spring-boot-starter-test') 
} 

PS:也许是毫无价值的,但根本模块(baseProjectOauth2)在 我们可以欣赏到这根gradle这个文件

group 'com.pcsystem' 
version '1.0-SNAPSHOT' 

apply plugin: 'java' 

sourceCompatibility = 1.8 

repositories { 
    mavenCentral() 
} 

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

请分享Gradle文件。我认为你没有正确标记资源文件夹。 – user1615664

+0

更新了帖子。感谢您的回答 – Tommolo

回答

0

我觉得贪婪在回答我自己的问题,但我想我已经解决了。

我做这些事情: - 被测模块

src 
    main 
    test 
     java 
     resources 
      application.properties 

>创建的资源文件夹中的属性文件,我只把这个设置

logging.config=log4j2.xml 

和所有我要现在说是 "explicative image here"

只是我必须深入研究弹簧结构(甚至gradle一)关于自动检测o f属性文件

0

你缺少你的项目结构src/test/resources文件夹,看起来像当前位置log4j2.xml在项目中根目录下根本没有类路径

依靠Gradle项目约定并将您的配置f尔斯因此,即创造或者SRC /测试/资源,并把文件放在那里,如果你的日志记录配置测试具体

src 
    test 
     java 
     ... 
    resources 
     log4j2.xml 

或者,如果记录里面您log4j2.xml将您的应用程序在现场使用配置运行(包含到.jar可交付成果中),将此文件移动到src/main/resources而不是

这将使您的logging.config=log4j2.xml工作。

约摇篮工程结构&资源文件夹,而且阅读是here