1. 知识积累
1.1 Maven提出"约定优于配置“
maven提出这一概念,为项目提供合理的默认行为,无需不必要的配置,提供了默认的目录。
src ——> 源代码和测试代码的根目录
main 应用代码的源目录
java 源代码
resources 项目的资源文件
test 测试代码的源目录
java 测试代码
resources 测试的资源文件
target 编译后的类文件、jar文件等
对于Maven约定优于配置的理解,一方面对于小型项目基本满足我们的需要,基本不需要自己配置东西,使用Maven已经配置好的,快速上手,学习成本降低;另一方面,对于不满足我们需要的还可以自定义设置,体现了灵活性。配置大量减少了,随着项目变的越复杂,这种优势就越明显。
原文链接:https://blog.csdn.net/liutengteng130/article/details/46991829
1.2. dependencyManagement 和 dependencies区别
dependencies即使在子项目中不写该依赖项,那么子项目仍然会从父项目中继承该依赖项(全部继承)
dependencyManagement里只是声明依赖,并不实现引入,因此子项目需要显示的声明需要用的依赖。如果不在子项目中声明依赖,是不会从父项目中继承下来的;只有在子项目中写了该依赖项,并且没有指定具体版本,才会从父项目中继承该项,并且version和scope都读取自父pom;另外如果子项目中指定了版本号,那么会使用子项目中指定的jar版本。
原文链接:https://blog.csdn.net/liutengteng130/article/details/46991829
2 问题和解析
2.1 遇到问题
JUNIT运行测试类过程中,报出如下的错误信息:
SLF4J: Found binding in [jar:file:/D:/DevSpace/M2Space/ch/qos/logback/logback-classic/1.1.11/logback-classic-1.1.11.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: Found binding in [jar:file:/D:/DevSpace/M2Space/org/apache/logging/log4j/log4j-slf4j-impl/2.7/log4j-slf4j-impl-2.7.jar!/org/slf4j/impl/StaticLoggerBinder.class]
以上是在系统启动过程中的错误信息,关键错误信息是:
Logging system failed to initialize using configuration from ‘src/resources/log4j2.xml’
java.lang.IllegalStateException: Logback configuration error detected:
2.2. 问题分析
问题的解决尝试:
1. application-dev.properties 中配置log4j.xml 路径,后面的空格去掉。
2. 将spring-boot-starter-logging的包在spring-boot-starter中直接排除掉,从spring boot整体上进行替换。
3. B项目pom.xml去除dependencyManagement,保留dependencies,A项目重新关联B项目(右键-properties - java build Path - Projects - Add),问题解除。
3. 总结
项目背景:B项目为纯JAVA项目,转为maven项目,计划将来打包上传maven仓库,供A项目和其它项目引用。但前期开发阶段,B项目测试阶段未上传或打JAR包引入,采用项目关联方式。当A项目关联项目B,运行JUNIT测试类报错,关于log4j.xml文件找不到、JAR包冲突等。
B项目的Pom文件检查:与其它类似纯JAVA转maven项目的pom.xml 文件比较,发现dependencyManagement的区别。尝试去除dependencyManagement,再次项目关联,测试类之前报的错误解决。