2013-11-15 3 views
1

У меня есть приложение, для которого требуется несколько разных версий тех же библиотек. При запуске intellij это не проблема, потому что он экспортирует путь к классам таким образом, чтобы избежать конфликтов. Затем я использую плагин maven shade для создания uber-jar при компиляции для производства.Конфликты зависимостей Maven во время теста (уверенность), но не производство

Однако при использовании плагина surefire для запуска моих модульных тестов конфликты появляются снова. Кто-нибудь знает способ, которым я могу гарантировать, что плагин с уверенным пламенем создает путь класса таким образом, чтобы избежать этих конфликтов?

Спасибо!

UPDATE: Ниже приведена ошибка, которую я получаю (хотя это довольно специфично для моего приложения). В основном есть две версии Saxon HE и PE, которые оба загружаются. При запуске тестов с уверенностью это вызывает это исключение:

java.lang.reflect.InvocationTargetException 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) 
    at java.lang.reflect.Method.invoke(Method.java:597) 
    at com.jorsek.appserver.bootstrap.Main.invokeMain(Main.java:130) 
    at com.jorsek.appserver.bootstrap.Main.run(Main.java:449) 
    at framework.TestUtils.startupDatabase(TestUtils.java:41) 
    at framework.AbstractTestInstance.startDatabase(AbstractTestInstance.java:41) 
    at framework.AbstractTestInstance.startDatabase(AbstractTestInstance.java:55) 
    at org.jorsek.exist.versioning.AllSetslTest.setUpBeforeClass(AllSetslTest.java:80) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) 
    at java.lang.reflect.Method.invoke(Method.java:597) 
    at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:47) 
    at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12) 
    at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:44) 
    at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:24) 
    at org.junit.internal.runners.statements.RunAfters.evaluate(RunAfters.java:27) 
    at org.junit.runners.ParentRunner.run(ParentRunner.java:309) 
    at org.apache.maven.surefire.junit4.JUnit4TestSet.execute(JUnit4TestSet.java:59) 
    at org.apache.maven.surefire.suite.AbstractDirectoryTestSuite.executeTestSet(AbstractDirectoryTestSuite.java:120) 
    at org.apache.maven.surefire.suite.AbstractDirectoryTestSuite.execute(AbstractDirectoryTestSuite.java:103) 
    at org.apache.maven.surefire.Surefire.run(Surefire.java:169) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) 
    at java.lang.reflect.Method.invoke(Method.java:597) 
    at org.apache.maven.surefire.booter.SurefireBooter.runSuitesInProcess(SurefireBooter.java:350) 
    at org.apache.maven.surefire.booter.SurefireBooter.main(SurefireBooter.java:1021) 
Caused by: java.util.ServiceConfigurationError: javax.xml.transform.TransformerFactory: Provider com.saxonica.config.ProfessionalTransformerFactory could not be instantiated: java.lang.VerifyError: (class: com/saxonica/config/ProfessionalConfiguration, method: newExpressionParser signature: (Ljava/lang/String;ZLnet/sf/saxon/value/DecimalValue;)Lnet/sf/saxon/expr/ExpressionParser;) Wrong return type in function 
    at java.util.ServiceLoader.fail(ServiceLoader.java:207) 
    at java.util.ServiceLoader.access$100(ServiceLoader.java:164) 
    at java.util.ServiceLoader$LazyIterator.next(ServiceLoader.java:360) 
    at java.util.ServiceLoader$1.next(ServiceLoader.java:428) 
    at org.exist.validation.XmlLibraryChecker.check(XmlLibraryChecker.java:162) 
    at com.jorsek.appserver.jetty.JettyStart.<init>(JettyStart.java:95) 
    at com.jorsek.appserver.jetty.JettyStart.main(JettyStart.java:77) 
    ... 30 more 
Caused by: java.lang.VerifyError: (class: com/saxonica/config/ProfessionalConfiguration, method: newExpressionParser signature: (Ljava/lang/String;ZLnet/sf/saxon/value/DecimalValue;)Lnet/sf/saxon/expr/ExpressionParser;) Wrong return type in function 
    at com.saxonica.config.ProfessionalTransformerFactory.<init>(ProfessionalTransformerFactory.java:24) 
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) 
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39) 
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27) 
    at java.lang.reflect.Constructor.newInstance(Constructor.java:513) 
    at java.lang.Class.newInstance0(Class.java:357) 
    at java.lang.Class.newInstance(Class.java:310) 
    at java.util.ServiceLoader$LazyIterator.next(ServiceLoader.java:356) 
    ... 34 more 
+0

Можете ли вы приложить пример ошибки конфликта? – MariuszS

ответ

0

Возможно, вы также можете переопределить другую зависимость от области проверки? Или, если нужно, просто переопределите их как по умолчанию. Или есть какая-то причина, по которой вы не можете сделать ничего из вышеперечисленного?

Или альтернативой, конечно же, является начало работы с загрузчиком классов во время тестовых прогонов, как показано на рисунке here.

Смежные вопросы