Maven 依赖于 Spring Boot 和 Junit
Posted
技术标签:
【中文标题】Maven 依赖于 Spring Boot 和 Junit【英文标题】:Maven dependancy with spring boot and Junit 【发布时间】:2016-07-16 18:12:50 【问题描述】:我正在做一个基于 spring-boot 1.2.5 的项目。
当我使用 maven 安装脚本执行测试时,它们会成功通过。 但是当我尝试在 eclipse 中使用 JUnit 执行我的测试时,我遇到了以下问题:
java.lang.SecurityException:类“org.hamcrest.Matchers”的签名者 信息与其他类的签名者信息不匹配 相同的包裹在 java.lang.ClassLoader.checkCerts(ClassLoader.java:895) 在 java.lang.ClassLoader.preDefineClass(ClassLoader.java:665) 在 java.lang.ClassLoader.defineClass(ClassLoader.java:758) 在 java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142) 在 java.net.URLClassLoader.defineClass(URLClassLoader.java:455) 在 java.net.URLClassLoader.access$100(URLClassLoader.java:73) 在 java.net.URLClassLoader$1.run(URLClassLoader.java:367) 在 java.net.URLClassLoader$1.run(URLClassLoader.java:361) 在 java.security.AccessController.doPrivileged(Native Method) 在 java.net.URLClassLoader.findClass(URLClassLoader.java:360) 在 java.lang.ClassLoader.loadClass(ClassLoader.java:424) 在 sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308) 在 java.lang.ClassLoader.loadClass(ClassLoader.java:357) 在 net.aptea.sba.tests.controllers.TestClientController.listClient(TestClientController.java:24) 在 sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 在 sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) 在 sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 在 java.lang.reflect.Method.invoke(Method.java:483) 在 org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:50) 在 org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12) 在 org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:47) 在 org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17) 在 org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:26) 在 org.springframework.test.context.junit4.statements.RunBeforeTestMethodCallbacks.evaluate(RunBeforeTestMethodCallbacks.java:73) 在 org.springframework.test.context.junit4.statements.RunAfterTestMethodCallbacks.evaluate(RunAfterTestMethodCallbacks.java:82) 在 org.springframework.test.context.junit4.statements.SpringRepeat.evaluate(SpringRepeat.java:73) 在 org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:325) 在 org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:224) 在 org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:83) 在 org.junit.runners.ParentRunner$3.run(ParentRunner.java:290) 在 org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71) 在 org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288) 在 org.junit.runners.ParentRunner.access$000(ParentRunner.java:58) 在 org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268) 在 org.springframework.test.context.junit4.statements.RunBeforeTestClassCallbacks.evaluate(RunBeforeTestClassCallbacks.java:61) 在 org.springframework.test.context.junit4.statements.RunAfterTestClassCallbacks.evaluate(RunAfterTestClassCallbacks.java:68) 在 org.junit.runners.ParentRunner.run(ParentRunner.java:363) 在 org.springframework.test.context.junit4.SpringJUnit4ClassRunner.run(SpringJUnit4ClassRunner.java:163) 在 org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:86) 在 org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38) 在 org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:459) 在 org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:675) 在 org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:382) 在 org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:192)
我认为这是spring boot框架内部的依赖问题:
Dependancy hirarchy
所以我在 pom.xml 中添加了以下几行:
<dependency>
<groupId>org.mockito</groupId>
<artifactId>mockito-core</artifactId>
<version>1.9.5</version>
<exclusions>
<exclusion>
<groupId>org.hamcrest</groupId>
<artifactId>hamcrest-core</artifactId>
</exclusion>
</exclusions>
<scope>test</scope>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<exclusions>
<exclusion>
<groupId>org.hamcrest</groupId>
<artifactId>hamcrest-core</artifactId>
</exclusion>
</exclusions>
<scope>test</scope>
</dependency>
mvn 依赖:树结果:
[INFO] net.aptea.sba:sba-web:war:0
[INFO] +- net.aptea.sba:sba-metier-dao:jar:0:compile
[INFO] | +- org.springframework.boot:spring-boot-starter-data-jpa:jar:1.2.5.RELEASE:compile
[INFO] | | +- org.springframework.boot:spring-boot-starter-aop:jar:1.2.5.RELEASE:compile
[INFO] | | | +- org.aspectj:aspectjrt:jar:1.8.6:compile
[INFO] | | | \- org.aspectj:aspectjweaver:jar:1.8.6:compile
[INFO] | | +- org.springframework.boot:spring-boot-starter-jdbc:jar:1.2.5.RELEASE:compile
[INFO] | | | +- org.springframework:spring-jdbc:jar:4.1.7.RELEASE:compile
[INFO] | | | +- org.apache.tomcat:tomcat-jdbc:jar:8.0.23:compile
[INFO] | | | | \- org.apache.tomcat:tomcat-juli:jar:8.0.23:compile
[INFO] | | | \- org.springframework:spring-tx:jar:4.1.7.RELEASE:compile
[INFO] | | +- org.hibernate:hibernate-entitymanager:jar:4.3.10.Final:compile
[INFO] | | | +- org.jboss.logging:jboss-logging-annotations:jar:1.2.0.Beta1:compile
[INFO] | | | +- org.hibernate:hibernate-core:jar:4.3.10.Final:compile
[INFO] | | | | +- antlr:antlr:jar:2.7.7:compile
[INFO] | | | | \- org.jboss:jandex:jar:1.1.0.Final:compile
[INFO] | | | +- dom4j:dom4j:jar:1.6.1:compile
[INFO] | | | | \- xml-apis:xml-apis:jar:1.0.b2:compile
[INFO] | | | +- org.hibernate.common:hibernate-commons-annotations:jar:4.0.5.Final:compile
[INFO] | | | +- org.hibernate.javax.persistence:hibernate-jpa-2.1-api:jar:1.0.0.Final:compile
[INFO] | | | \- org.javassist:javassist:jar:3.18.1-GA:compile
[INFO] | | +- javax.transaction:javax.transaction-api:jar:1.2:compile
[INFO] | | +- org.springframework:spring-orm:jar:4.1.7.RELEASE:compile
[INFO] | | +- org.springframework.data:spring-data-jpa:jar:1.7.3.RELEASE:compile
[INFO] | | | +- org.springframework.data:spring-data-commons:jar:1.9.3.RELEASE:compile
[INFO] | | | \- org.slf4j:jcl-over-slf4j:jar:1.7.12:compile
[INFO] | | \- org.springframework:spring-aspects:jar:4.1.7.RELEASE:compile
[INFO] | +- org.springframework.boot:spring-boot-starter-security:jar:1.2.5.RELEASE:compile
[INFO] | | +- org.springframework:spring-beans:jar:4.1.7.RELEASE:compile
[INFO] | | +- org.springframework:spring-context:jar:4.1.7.RELEASE:compile
[INFO] | | +- org.springframework:spring-expression:jar:4.1.7.RELEASE:compile
[INFO] | | +- org.springframework.security:spring-security-config:jar:3.2.7.RELEASE:compile
[INFO] | | | +- aopalliance:aopalliance:jar:1.0:compile
[INFO] | | | \- org.springframework.security:spring-security-core:jar:3.2.7.RELEASE:compile
[INFO] | | +- org.springframework.security:spring-security-web:jar:3.2.7.RELEASE:compile
[INFO] | | \- org.springframework:spring-aop:jar:4.1.7.RELEASE:compile
[INFO] | +- org.springframework.boot:spring-boot-starter-mail:jar:1.2.5.RELEASE:compile
[INFO] | | +- org.springframework:spring-context-support:jar:4.1.7.RELEASE:compile
[INFO] | | \- com.sun.mail:javax.mail:jar:1.5.4:compile
[INFO] | | \- javax.activation:activation:jar:1.1:compile
[INFO] | +- com.fasterxml.jackson.core:jackson-databind:jar:2.6.2:compile
[INFO] | | +- com.fasterxml.jackson.core:jackson-annotations:jar:2.6.0:compile
[INFO] | | \- com.fasterxml.jackson.core:jackson-core:jar:2.6.2:compile
[INFO] | +- org.postgresql:postgresql:jar:9.4-1202-jdbc42:compile
[INFO] | +- com.dropbox.core:dropbox-core-sdk:jar:1.8.1:compile
[INFO] | +- org.apache.pdfbox:pdfbox:jar:1.8.10:compile
[INFO] | | +- org.apache.pdfbox:fontbox:jar:1.8.10:compile
[INFO] | | +- org.apache.pdfbox:jempbox:jar:1.8.10:compile
[INFO] | | \- commons-logging:commons-logging:jar:1.1.1:compile
[INFO] | +- com.lowagie:itext:jar:2.1.7:compile
[INFO] | | +- bouncycastle:bcmail-jdk14:jar:138:compile
[INFO] | | +- bouncycastle:bcprov-jdk14:jar:138:compile
[INFO] | | \- org.bouncycastle:bctsp-jdk14:jar:1.38:compile
[INFO] | | +- org.bouncycastle:bcprov-jdk14:jar:1.38:compile
[INFO] | | \- org.bouncycastle:bcmail-jdk14:jar:1.38:compile
[INFO] | +- org.jfree:jfreechart:jar:1.0.19:compile
[INFO] | | \- org.jfree:jcommon:jar:1.0.23:compile
[INFO] | +- com.googlecode.juniversalchardet:juniversalchardet:jar:1.0.3:compile
[INFO] | +- com.microsoft.ews-java-api:ews-java-api:jar:2.0:compile
[INFO] | | +- org.apache.httpcomponents:httpclient:jar:4.4.1:compile
[INFO] | | +- org.apache.httpcomponents:httpcore:jar:4.4.1:compile
[INFO] | | +- org.apache.commons:commons-lang3:jar:3.4:compile
[INFO] | | \- joda-time:joda-time:jar:2.8:compile
[INFO] | \- commons-codec:commons-codec:jar:1.9:compile
[INFO] +- org.springframework.boot:spring-boot-starter-web:jar:1.2.5.RELEASE:compile
[INFO] | +- org.springframework.boot:spring-boot-starter:jar:1.2.5.RELEASE:compile
[INFO] | | +- org.springframework.boot:spring-boot:jar:1.2.5.RELEASE:compile
[INFO] | | +- org.springframework.boot:spring-boot-autoconfigure:jar:1.2.5.RELEASE:compile
[INFO] | | +- org.springframework.boot:spring-boot-starter-logging:jar:1.2.5.RELEASE:compile
[INFO] | | | +- org.slf4j:jul-to-slf4j:jar:1.7.12:compile
[INFO] | | | +- org.slf4j:log4j-over-slf4j:jar:1.7.12:compile
[INFO] | | | \- ch.qos.logback:logback-classic:jar:1.1.3:compile
[INFO] | | | \- ch.qos.logback:logback-core:jar:1.1.3:compile
[INFO] | | \- org.yaml:snakeyaml:jar:1.14:compile
[INFO] | +- org.hibernate:hibernate-validator:jar:5.1.3.Final:compile
[INFO] | | +- javax.validation:validation-api:jar:1.1.0.Final:compile
[INFO] | | +- org.jboss.logging:jboss-logging:jar:3.1.3.GA:compile
[INFO] | | \- com.fasterxml:classmate:jar:1.0.0:compile
[INFO] | +- org.springframework:spring-core:jar:4.1.7.RELEASE:compile
[INFO] | +- org.springframework:spring-web:jar:4.1.7.RELEASE:compile
[INFO] | \- org.springframework:spring-webmvc:jar:4.1.7.RELEASE:compile
[INFO] +- org.springframework.boot:spring-boot-starter-jersey:jar:1.2.5.RELEASE:compile
[INFO] | +- org.glassfish.jersey.core:jersey-server:jar:2.14:compile
[INFO] | | +- org.glassfish.jersey.core:jersey-common:jar:2.14:compile
[INFO] | | | +- org.glassfish.jersey.bundles.repackaged:jersey-guava:jar:2.14:compile
[INFO] | | | \- org.glassfish.hk2:osgi-resource-locator:jar:1.0.1:compile
[INFO] | | +- org.glassfish.jersey.core:jersey-client:jar:2.14:compile
[INFO] | | +- javax.ws.rs:javax.ws.rs-api:jar:2.0.1:compile
[INFO] | | +- javax.annotation:javax.annotation-api:jar:1.2:compile
[INFO] | | +- org.glassfish.hk2:hk2-api:jar:2.4.0-b06:compile
[INFO] | | | +- org.glassfish.hk2:hk2-utils:jar:2.4.0-b06:compile
[INFO] | | | \- org.glassfish.hk2.external:aopalliance-repackaged:jar:2.4.0-b06:compile
[INFO] | | +- org.glassfish.hk2.external:javax.inject:jar:2.4.0-b06:compile
[INFO] | | \- org.glassfish.hk2:hk2-locator:jar:2.4.0-b06:compile
[INFO] | +- org.glassfish.jersey.containers:jersey-container-servlet-core:jar:2.14:compile
[INFO] | +- org.glassfish.jersey.containers:jersey-container-servlet:jar:2.14:compile
[INFO] | +- org.glassfish.jersey.ext:jersey-bean-validation:jar:2.14:compile
[INFO] | +- org.glassfish.jersey.ext:jersey-spring3:jar:2.14:compile
[INFO] | | +- org.glassfish.hk2:hk2:jar:2.4.0-b06:compile
[INFO] | | | +- org.glassfish.hk2:config-types:jar:2.4.0-b06:compile
[INFO] | | | +- org.glassfish.hk2:core:jar:2.4.0-b06:compile
[INFO] | | | +- org.glassfish.hk2:hk2-config:jar:2.4.0-b06:compile
[INFO] | | | | +- org.jvnet:tiger-types:jar:1.4:compile
[INFO] | | | | \- org.glassfish.hk2.external:bean-validator:jar:2.4.0-b06:compile
[INFO] | | | +- org.glassfish.hk2:hk2-runlevel:jar:2.4.0-b06:compile
[INFO] | | | \- org.glassfish.hk2:class-model:jar:2.4.0-b06:compile
[INFO] | | | \- org.glassfish.hk2.external:asm-all-repackaged:jar:2.4.0-b06:compile
[INFO] | | \- org.glassfish.hk2:spring-bridge:jar:2.4.0-b06:compile
[INFO] | \- org.glassfish.jersey.media:jersey-media-json-jackson:jar:2.14:compile
[INFO] | +- com.fasterxml.jackson.jaxrs:jackson-jaxrs-base:jar:2.3.2:compile
[INFO] | \- com.fasterxml.jackson.jaxrs:jackson-jaxrs-json-provider:jar:2.3.2:compile
[INFO] | \- com.fasterxml.jackson.module:jackson-module-jaxb-annotations:jar:2.3.2:compile
[INFO] +- org.springframework.boot:spring-boot-starter-tomcat:jar:1.2.5.RELEASE:provided
[INFO] | +- org.apache.tomcat.embed:tomcat-embed-core:jar:8.0.23:provided
[INFO] | +- org.apache.tomcat.embed:tomcat-embed-el:jar:8.0.23:provided
[INFO] | +- org.apache.tomcat.embed:tomcat-embed-logging-juli:jar:8.0.23:provided
[INFO] | \- org.apache.tomcat.embed:tomcat-embed-websocket:jar:8.0.23:provided
[INFO] +- org.springframework.boot:spring-boot-starter-actuator:jar:1.2.5.RELEASE:compile
[INFO] | \- org.springframework.boot:spring-boot-actuator:jar:1.2.5.RELEASE:compile
[INFO] +- org.mockito:mockito-core:jar:1.9.5:test
[INFO] | \- org.objenesis:objenesis:jar:1.0:test
[INFO] +- junit:junit:jar:4.12:test
[INFO] +- org.springframework.boot:spring-boot-starter-test:jar:1.2.5.RELEASE:test
[INFO] | +- org.hamcrest:hamcrest-core:jar:1.3:test
[INFO] | +- org.hamcrest:hamcrest-library:jar:1.3:test
[INFO] | \- org.springframework:spring-test:jar:4.1.7.RELEASE:test
[INFO] \- com.jayway.jsonpath:json-path:jar:1.1.0:test
[INFO] +- net.minidev:json-smart:jar:2.0:test
[INFO] | \- net.minidev:asm:jar:1.0:test
[INFO] | \- asm:asm:jar:3.3.1:test
[INFO] \- org.slf4j:slf4j-api:jar:1.7.7:compile
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 11.927 s
[INFO] Finished at: 2016-03-29T17:46:31+02:00
[INFO] Final Memory: 25M/275M
[INFO] -----------------------------
但我无法解决这个问题。
你知道如何解决这个问题吗? 感谢您的建议。
拉维·N.
【问题讨论】:
不要添加那些依赖使用spring-boot-starter-test
而不是单独的jar。
我已经在使用 spring-boot-starter-test 但是,正如您在我的屏幕截图中看到的(依赖层次结构),有很多冲突,这就是我添加这些依赖关系的原因。跨度>
如果你有冲突,你就是在做你一开始就不应该做的事情。此外,您的屏幕截图仅告诉我您使用了该启动器。如果您有冲突,您没有正确使用 spring boot 来管理您的依赖项。发布您的实际 pom 和/r mvn dependency:tree
的输出。
我已经发布了 mvn dependency:tree 结果。如果您发现有问题,请告诉我。非常感谢您的帮助
【参考方案1】:
我相信你 pom.xml 是不正确的。我有这个:
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<scope>test</scope>
</dependency>
JUnit 依赖于 hamcrest-core,但它的 pom.xml 已让 Maven 将其引入,而您无需在您的文件中明确要求它。
可能是 Eclipse 有一个与您的 pom.xml 中的版本冲突的内置 JUnit。我会推荐一个更好的 IDE - 使用 JetBrains 的 IntelliJ。
【讨论】:
在我的情况下,我尝试从 Junit 中排除“hamcrest-core”依赖关系,因为这个 JAR 已经包含在 spring-boot-starter-test 中(正如你在我的屏幕截图中看到的依赖层次结构) . 我也在使用所有这些 JAR,并且我可以在 Maven 和 IntelliJ 中运行测试而不会出现排除或问题。 我会用 IntelliJ 试试【参考方案2】:duffymo 部分正确,这是 Eclipse 和他的集成 JUnit 的问题。
为了解决我的问题,我这样做了:
1 - 从这里下载最新的 hamcrest-all jar:https://storage.googleapis.com/google-code-archive-downloads/v2/code.google.com/hamcrest/
2- 进入eclipse安装文件夹:eclipse/plugin/,找到org.hamcrest...jar
3- 备份第 2 步的 jar 并将其替换为第 1 步的 jar(重命名与第 2 步的 jar 相同)。
4-重启eclipse
之后,我的问题就解决了。
【讨论】:
【参考方案3】:指定的答案具有误导性,根本不是正确的做法。我所做的只是进入项目属性并从 Java 构建路径中删除 JUnit。当我直接运行测试而不是从 maven 运行测试时,Eclipse 会自动添加它。
【讨论】:
以上是关于Maven 依赖于 Spring Boot 和 Junit的主要内容,如果未能解决你的问题,请参考以下文章
Spring boot 和 Jira REST API 在 maven 中给出依赖错误
Spring boot 打包为war包报错:提示缺少web.xml
即使依赖项存在于类路径中,Spring boot 仍显示“无法解析”