maven - Arquillian 收缩包装

标签 maven junit jboss-arquillian

我在使用 pom.xml 依赖项创建 JUnit 测试时遇到问题。

测试正在使用 Arquillian 运行

@RunWith(Arquillian.class)

在这个方法中

@Deployment
public static JavaArchive createDeployment() {

首先,我使用我正在测试的项目的包创建一个 JavaArchive

   JavaArchive merge =  ShrinkWrap.create(JavaArchive.class).
            addPackages(true,
                    "migrazioneGeaPersistenzaTampone",
                    "migrazioneGeaPersistenza",
                    "it.**.mistral.importGEA4.task",
                    "migrazioneGeaPersistenzaAccess"
            ).
           addClasses(java.sql.Connection.class)
            .addAsManifestResource(EmptyAsset.INSTANCE, "beans.xml");

然后当我启动测试时,缺少一些依赖项

Unable to resolve any beans for Types: [class it.**.**.be.service.EnvironmentRootService]

存在于此依赖项中

      <dependency>
        <groupId>it.**.mistral</groupId>
        <artifactId>mistral-be</artifactId>
        <version>0.1.0</version>
        <scope>compile</scope>  
     </dependency>

我尝试了很多不同的方法来添加这些依赖项,最好的方法似乎是使用 ShrinkWrap 解析器( https://github.com/shrinkwrap/resolver/blob/master/README.asciidoc ,特别是本段 https://github.com/shrinkwrap/resolver/blob/master/README.asciidoc#resolution-of-artifacts-defined-in-pom-files )

一)

JavaArchive[] archives = Maven.resolver().loadPomFromFile(path_to_pom_file). importDependencies(ScopeType.TEST,ScopeType.COMPILE). resolve().withTransitivity().as(JavaArchive.class);

Maven.resolver().loadPomFromFile("/path/to/pom.xml").importRuntimeDependencies() .resolve().withTransitivity().asFile();

无论哪种方式,依赖关系都会被忽略(我错过了一些东西?)

b)

JavaArchive[] mistral_be = Maven.configureResolver().workOffline(). resolve("it.**.mistral:mistral-be:0.1.0").withTransitivity().as(JavaArchive.class);
for (int i = 0; i < mistral_be.length ; i++) {
merge = merge.merge(mistral_be[i]);
}

用一个简单的

System.out.println(merge.toString(true));

我可以看到依赖项中的所有文件都存在!无论如何,我使用本地存储库workoffline() 也许我缺少一些依赖项?

但是用 a 退出该方法

return merge;

抛出“java.lang.NoClassDefFoundError:com/google/protobuf/GenerateMessage ....引起:java.lang.ClassNotFoundException:com.google.protobuf.GenerateMessage”错误。

然后我再次尝试添加缺少的依赖项

// Tryn'g to add protobuf dependencies JavaArchive[] prto_buf = Maven.configureResolver().withMavenCentralRepo(true).resolve("com.google.protobuf:protobuf-java:2.3.0").withTransitivity().as(JavaArchive.class);

       for (int i = 0; i < prto_buf.length ; i++) {
           projectPackages = projectPackages.merge(prto_buf[i]);
       }

抛出相同异常... 再次,用一个简单的

System.out.println(merge.toString(true));

我可以看到 com.Google.protobuf.GenerateMessage 存在

依赖项摘录:

   <dependency>
        <groupId>org.jboss.spec</groupId>
        <artifactId>jboss-javaee-6.0</artifactId>
        <version>1.0.0.Final</version>
        <type>pom</type>
        <scope>provided</scope>
    </dependency>

    <dependency>
        <groupId>org.jboss.arquillian.junit</groupId>
        <artifactId>arquillian-junit-container</artifactId>
        <scope>test</scope>
    </dependency>

    <dependency>
        <groupId>org.jboss.arquillian.container</groupId>
        <artifactId>arquillian-weld-ee-embedded-1.1</artifactId>
        <version>1.0.0.CR3</version>
        <scope>test</scope>
    </dependency>

    <dependency>
        <groupId>org.jboss.shrinkwrap.resolver</groupId>
        <artifactId>shrinkwrap-resolver-depchain</artifactId>
        <version>2.1.0</version>
        <scope>test</scope>
    </dependency>


</dependencies>


<dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>org.jboss.arquillian</groupId>
            <artifactId>arquillian-bom</artifactId>
            <version>1.1.5.Final</version>
            <scope>import</scope>
            <type>pom</type>
        </dependency>
    </dependencies>
</dependencyManagement>

谁能帮我解决这个问题吗?

最佳答案

这对我来说就像是一个类加载问题。特别是考虑到您正在使用嵌入式容器,它基本上从项目类路径中获取其中的所有内容。

您部署应用程序的目标容器是什么?也许如果您尝试在那里运行测试而不是嵌入式容器,您至少会看到这是否确实是问题所在,或者您的部署 Artifact 仍然存在问题。

关于maven - Arquillian 收缩包装,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26316065/

相关文章:

java - Arquillian wildfly8.2 嵌入式 : JBAS014670: Failed initializing module org. jboss.as.logging

spring - Maven 和 Spring = 无法创建应用程序上下文 : Unable to locate Spring NamespaceHandler

java - 寻找带有 Spring(特别是 Spring MVC)的 OSGi 教程

maven 提供的依赖会导致 Intellij 中的 NoClassDefFoundError 吗?

java - 有什么方法可以确保 JMS 事件发生或告诉 JMS 事件在特定时间开始和完成?

java - 依赖注入(inject)在 Arquillian 测试中不起作用

java - 从 git 导入项目时出现 NoClassDefFounderror 错误

java - "java.lang.IllegalStateException: The WebApplicationContext for test context [...] must be configured with a MockServletContext."

java - Put 方法在 TreeMap 的实现中

java - 用于 JUnit 测试的多个 Spring 数据源