2011-06-09 13 views
2

我正在使用Jenkins執行Maven構建,其中包含使用Arquillian的EJB集成測試。Arquillian/Shrinkwrap代理中的MavenDependencyResolver

承載Jenkins並運行構建的服務器位於代理之後,因爲settings.xml包含有效的代理設置,所以這不應該是個問題。 (在我的本地系統沒有代理它的工作就好了。)

Maven的解決依賴關係(在運行mvn install)的作品完美的罰款(從bash或詹金斯手動啓動),但如果我用的Arquillian的MavenDependencyResolver我得到一個例外:

異常

2011-06-09 06:03:59,391 ERROR my.package.test.util.ArchiveUtil - Could not resolve DBUnit Dependency 
org.jboss.shrinkwrap.resolver.api.ResolutionException: Unable to collect dependeny tree for a resolution 
    at org.jboss.shrinkwrap.resolver.impl.maven.MavenBuilderImpl.resolveAsFiles(MavenBuilderImpl.java:320) 
    at org.jboss.shrinkwrap.resolver.impl.maven.MavenBuilderImpl.resolveAs(MavenBuilderImpl.java:376) 
    at org.jboss.shrinkwrap.resolver.impl.maven.MavenBuilderImpl.resolveAs(MavenBuilderImpl.java:353) 
    at org.jboss.shrinkwrap.resolver.impl.maven.MavenBuilderImpl$MavenArtifactBuilderImpl.resolveAs(MavenBuilderImpl.java:450) 
    at my.package.test.util.ArchiveUtil.createTestArchive(ArchiveUtil.java:125) 
    at my.package.test.util.ArchiveUtil.<clinit>(ArchiveUtil.java:36) 
    at my.package.test.util.AbstractTest.createTestArchive(AbstractTest.java:46) 
    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.jboss.arquillian.impl.client.deployment.AnnotationDeploymentScenarioGenerator.invoke(AnnotationDeploymentScenarioGenerator.java:162) 
    at org.jboss.arquillian.impl.client.deployment.AnnotationDeploymentScenarioGenerator.generateDeployment(AnnotationDeploymentScenarioGenerator.java:100) 
    at org.jboss.arquillian.impl.client.deployment.AnnotationDeploymentScenarioGenerator.generate(AnnotationDeploymentScenarioGenerator.java:55) 
    at org.jboss.arquillian.impl.client.deployment.DeploymentGenerator.generateDeployment(DeploymentGenerator.java:76) 
    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.jboss.arquillian.impl.core.ObserverImpl.invoke(ObserverImpl.java:90) 
    at org.jboss.arquillian.impl.core.EventContextImpl.invokeObservers(EventContextImpl.java:98) 
    at org.jboss.arquillian.impl.core.EventContextImpl.proceed(EventContextImpl.java:80) 
    at org.jboss.arquillian.impl.core.ManagerImpl.fire(ManagerImpl.java:126) 
    at org.jboss.arquillian.impl.core.ManagerImpl.fire(ManagerImpl.java:106) 
    at org.jboss.arquillian.impl.core.EventImpl.fire(EventImpl.java:67) 
    at org.jboss.arquillian.impl.client.ContainerEventController.execute(ContainerEventController.java:68) 
    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.jboss.arquillian.impl.core.ObserverImpl.invoke(ObserverImpl.java:90) 
    at org.jboss.arquillian.impl.core.EventContextImpl.invokeObservers(EventContextImpl.java:98) 
    at org.jboss.arquillian.impl.core.EventContextImpl.proceed(EventContextImpl.java:80) 
    at org.jboss.arquillian.impl.TestContextHandler.createClassContext(TestContextHandler.java:68) 
    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.jboss.arquillian.impl.core.ObserverImpl.invoke(ObserverImpl.java:90) 
    at org.jboss.arquillian.impl.core.EventContextImpl.proceed(EventContextImpl.java:87) 
    at org.jboss.arquillian.impl.TestContextHandler.createSuiteContext(TestContextHandler.java:54) 
    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.jboss.arquillian.impl.core.ObserverImpl.invoke(ObserverImpl.java:90) 
    at org.jboss.arquillian.impl.core.EventContextImpl.proceed(EventContextImpl.java:87) 
    at org.jboss.arquillian.impl.core.ManagerImpl.fire(ManagerImpl.java:126) 
    at org.jboss.arquillian.impl.core.ManagerImpl.fire(ManagerImpl.java:106) 
    at org.jboss.arquillian.impl.EventTestRunnerAdaptor.beforeClass(EventTestRunnerAdaptor.java:70) 
    at org.jboss.arquillian.junit.Arquillian$2.evaluate(Arquillian.java:170) 
    at org.jboss.arquillian.junit.Arquillian.multiExecute(Arquillian.java:303) 
    at org.jboss.arquillian.junit.Arquillian.access$300(Arquillian.java:45) 
    at org.jboss.arquillian.junit.Arquillian$3.evaluate(Arquillian.java:187) 
    at org.junit.runners.ParentRunner.run(ParentRunner.java:236) 
    at org.jboss.arquillian.junit.Arquillian.run(Arquillian.java:127) 
    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: org.sonatype.aether.collection.DependencyCollectionException: Failed to collect dependencies for [org.dbunit:dbunit:jar:2.4.8()] 
    at org.sonatype.aether.impl.internal.DefaultDependencyCollector.collectDependencies(DefaultDependencyCollector.java:251) 
    at org.sonatype.aether.impl.internal.DefaultRepositorySystem.collectDependencies(DefaultRepositorySystem.java:267) 
    at org.sonatype.aether.impl.internal.DefaultRepositorySystem.resolveDependencies(DefaultRepositorySystem.java:314) 
    at org.jboss.shrinkwrap.resolver.impl.maven.MavenRepositorySystem.resolveDependencies(MavenRepositorySystem.java:176) 
    at org.jboss.shrinkwrap.resolver.impl.maven.MavenBuilderImpl.resolveAsFiles(MavenBuilderImpl.java:316) 
    ... 65 more 
Caused by: org.sonatype.aether.resolution.ArtifactDescriptorException: Failed to read artifact descriptor for org.dbunit:dbunit:jar:2.4.8 
    at org.apache.maven.repository.internal.DefaultArtifactDescriptorReader.loadPom(DefaultArtifactDescriptorReader.java:275) 
    at org.apache.maven.repository.internal.DefaultArtifactDescriptorReader.readArtifactDescriptor(DefaultArtifactDescriptorReader.java:171) 
    at org.sonatype.aether.impl.internal.DefaultDependencyCollector.process(DefaultDependencyCollector.java:419) 
    at org.sonatype.aether.impl.internal.DefaultDependencyCollector.collectDependencies(DefaultDependencyCollector.java:233) 
    ... 69 more 
Caused by: org.sonatype.aether.resolution.ArtifactResolutionException: Could not transfer artifact org.dbunit:dbunit:pom:2.4.8 from/to central (http://repo1.maven.org/maven2): Error transferring file: Connection timed out 
    at org.sonatype.aether.impl.internal.DefaultArtifactResolver.resolveArtifacts(DefaultArtifactResolver.java:499) 
    at org.sonatype.aether.impl.internal.DefaultArtifactResolver.resolveArtifact(DefaultArtifactResolver.java:187) 
    at org.apache.maven.repository.internal.DefaultArtifactDescriptorReader.loadPom(DefaultArtifactDescriptorReader.java:260) 
    ... 72 more 
Caused by: org.sonatype.aether.transfer.ArtifactTransferException: Could not transfer artifact org.dbunit:dbunit:pom:2.4.8 from/to central (http://repo1.maven.org/maven2): Error transferring file: Connection timed out 
    at org.sonatype.aether.connector.wagon.WagonRepositoryConnector$4.wrap(WagonRepositoryConnector.java:934) 
    at org.sonatype.aether.connector.wagon.WagonRepositoryConnector$4.wrap(WagonRepositoryConnector.java:925) 
    at org.sonatype.aether.connector.wagon.WagonRepositoryConnector$GetTask.flush(WagonRepositoryConnector.java:681) 
    at org.sonatype.aether.connector.wagon.WagonRepositoryConnector$GetTask.flush(WagonRepositoryConnector.java:675) 
    at org.sonatype.aether.connector.wagon.WagonRepositoryConnector.get(WagonRepositoryConnector.java:420) 
    at org.sonatype.aether.impl.internal.DefaultArtifactResolver.resolveArtifacts(DefaultArtifactResolver.java:411) 
    ... 74 more 
Caused by: org.apache.maven.wagon.TransferFailedException: Error transferring file: Connection timed out 
    at org.apache.maven.wagon.providers.http.LightweightHttpWagon.resourceExists(LightweightHttpWagon.java:357) 
    at org.sonatype.aether.connector.wagon.WagonRepositoryConnector$GetTask.run(WagonRepositoryConnector.java:566) 
    at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886) 
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908) 
    at java.lang.Thread.run(Thread.java:662) 
Caused by: java.net.ConnectException: Connection timed out 
    at java.net.PlainSocketImpl.socketConnect(Native Method) 
     at java.net.PlainSocketImpl.doConnect(PlainSocketImpl.java:351) 
    at java.net.PlainSocketImpl.connectToAddress(PlainSocketImpl.java:213) 
    at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:200) 
    at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:366) 
    at java.net.Socket.connect(Socket.java:529) 
    at java.net.Socket.connect(Socket.java:478) 
    at sun.net.NetworkClient.doConnect(NetworkClient.java:163) 
    at sun.net.www.http.HttpClient.openServer(HttpClient.java:394) 
    at sun.net.www.http.HttpClient.openServer(HttpClient.java:529) 
    at sun.net.www.http.HttpClient.<init>(HttpClient.java:233) 
    at sun.net.www.http.HttpClient.New(HttpClient.java:306) 
    at sun.net.www.http.HttpClient.New(HttpClient.java:323) 
    at sun.net.www.protocol.http.HttpURLConnection.getNewHttpClient(HttpURLConnection.java:970) 
    at sun.net.www.protocol.http.HttpURLConnection.plainConnect(HttpURLConnection.java:911) 
    at sun.net.www.protocol.http.HttpURLConnection.connect(HttpURLConnection.java:836) 
    at sun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection.java:1172) 
    at java.net.HttpURLConnection.getResponseCode(HttpURLConnection.java:379) 
    at org.apache.maven.wagon.providers.http.LightweightHttpWagon.resourceExists(LightweightHttpWagon.java:334) 
    ... 4 more 

Java源

//... 
try { 
    ear.addAsLibrary(DependencyResolvers 
      .use(MavenDependencyResolver.class) 
      .artifact("org.dbunit:dbunit:1.4.8") 
      .resolveAs(JavaArchive.class).iterator().next()); 
} catch (Throwable t) { 
    LOGGER.error("Could not resolve DBUnit Dependency", t); 
} 
//... 

的pom.xml

<dependency> 
     <groupId>org.dbunit</groupId> 
     <artifactId>dbunit</artifactId> 
     <version>${dbunit.version}</version> 
     <scope>test</scope> 
    </dependency> 

我怎樣才能確保此Java代碼到那裏是代理(如果缺少代理是問題)。我必須使用環境變量還是settings.xml?

是否有其他解決方案可以通過Shrinkwarp來獲得這種依賴關係?作爲jar? (我想這將是我的首選解決方案。)

環境細節

  • 服務器操作系統:Ubuntu的10.04
  • Maven的3.03
  • 詹金斯1.413在Tomcat 7運行
  • 的Arquillian 1.0。 0.Alpha5

謝謝。 Daniel

回答

3

當前不支持對依賴關係解析的代理支持。

但是,您可以指定settings.xml的路徑,該路徑用於激活直接提到的或激活的(激活的配置文件)中提及的特定存儲庫。

見的例子是:

https://github.com/shrinkwrap/resolver/blob/master/impl-maven/src/test/java/org/jboss/shrinkwrap/resolver/impl/maven/integration/ProfilesUnitTestCase.java

基本上,總結設置。XML法寶:

  1. 默認情況下,${user.home}/.m2/settings.xml
  2. 可以通過設置系統屬性來覆蓋org.apache.maven.user-settingsorg.apache.maven.user-settings
  3. 可以用MavenDependencyResolver.configureFrom(path-to-settings.xml-file)在您的測試

乾杯,

卡雷爾

+0

再次感謝你!就像我今天早些時候在irc中提到的那樣:即使MavenDependencyResolver存在於我的本地回購庫中,它也會嘗試從聯機存儲庫獲取工件。這就是爲什麼我加載它'MavenArtifactResolver'(http://community.jboss.org/wiki/HowDoIAddJARFilesToTheTestArchive),即使它可能是一個過時的解決方案,它只是工作... – 2011-06-09 18:32:20

0

這也是我遇到的同樣的問題。我試着在運行測試的JVM上設置-Dhttp.proxyHost -Dhttp.proxyPort,但仍然沒有成功。我終於必須通過命令行解決Maven依賴關係,以便在測試開始工作之前下載到我的存儲庫。假設與JVM一起運行的Maven依賴關係解析器將利用JVM的類來下載庫似乎是合理的。顯然,情況並非如此。