2014-12-05 196 views
0

当我把下面的依赖关系(和它的所有传递DEPS的为好)对我的类路径:码头ServletTester抛出抛出:SecurityException

<dependency> 
    <groupId>org.eclipse.jetty</groupId> 
    <artifactId>test-jetty-servlet</artifactId> 
    <version>8.1.14.v20131031</version> 
</dependency> 

并运行此JUnit测试:

public class MySimpleTest { 
    private ServletTester tester; 

    @Before 
    public void setUp() { 
     tester = new ServletTester(); 
     tester.contextPath = "http://localhost:8080/myapp/location"; 
     tester.addServlet(MyAppMockEndpoint.class, "/address/*"); 
     tester.start(); 
    } 

    @After 
    public void tearDown() { 
     tester.stop(); 
    } 

    @Test 
    public void test() { 
     // Dummy assertion that is always true, just to prove its not 
     // my code throwing the exception. 
     Assert.assertTrue(System.currentTimeMillis() > 0L); 
    } 

    public class MyAppMockEndpoint extends HttpServlet { 
     @Override 
     public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 
      response.getWriter().println(provideJson()) 
      response.getWriter().flush() 
     } 

     public String provideJson() { 
      return "{ \"id\": 5, \"fizz\": \"true\", \"buzz\": \"false\" }"; 
     } 
    } 
} 

我得到这个:

java.lang.SecurityException: class "javax.servlet.DispatcherType"'s signer information does not match signer information of other classes in the same package 
    at java.lang.ClassLoader.checkCerts(ClassLoader.java:952) 
    at java.lang.ClassLoader.preDefineClass(ClassLoader.java:666) 
    at java.lang.ClassLoader.defineClass(ClassLoader.java:794) 
    at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142) 
    at java.net.URLClassLoader.defineClass(URLClassLoader.java:449) 
    <giant stack trace omitted for brevity> 
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:192) 

为什么?什么是修复?如果其中一个传递依赖关系被签名,我该如何判断哪一个依赖关系?有没有一种方法可以指定所有传递代码的无符号版本?这里还有其他问题,还是更好的解决方案?

+0

将'mvn dependency:tree'的输出添加到问题中。您的依赖关系可能存在冲突。 – 2014-12-08 15:10:46

回答

0

这是值得的。我有一个类似的问题,并通过删除冗余的servlet-api(我在我的路径中提供)(javax.servlet servlet-api 2.3提供)来摆脱它。

我能够从命令行运行测试(在我的情况下sbt),但是当我从Intellij运行它们时,它们坠毁。

相关问题