Arquillian ShrinkWrap

I am having trouble building a JUnit test using pom.xml dependency.

The test is done with Arquillian

@RunWith (Arquillian.class)

In this method

@Deployment
public static JavaArchive createDeployment() {

      

I first create a JavaArchive with a project package that I am testing

   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");

      

Then when I run the test there are some missing dependencies

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

      

is present in this addiction

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

      

I tried many different things to add these dependencies, the best one seems to be using ShrinkWrap Resolvers ( https://github.com/shrinkwrap/resolver/blob/master/README.asciidoc , particullarry this paragraph https://github.com/ shrinkwrap / resolver / blob / master / README.asciidoc # resolution-of-artifacts-defined-in-pom-files )

a)

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

or

Maven.resolver (). LoadPomFromFile ("/path/to/pom.xml"). ImportRuntimeDependencies () ..resolve () withTransitivity () asFile () ;.

Dependency is ignored anyway (am I missing something?)

b)

JavaArchive [] mistral_be = Maven.configureResolver (). workOffline (). allow ("this is ** Mistral: Mistral-be: .. 0.1.0") .. withTransitivity () like (JavaArchive.class);
    for (int i = 0; i <mistral_be.length; i ++) {
        merge = merge.merge (mistral_be [i]);
    }

With a simple

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

      

I can see all files from dependencies are present! Anyway I'm using the local repository workoffline () Maybe I'm missing some dependencies?

But exiting the method with

return merge;

      

throws a "java.lang.NoClassDefFoundError: com / google / protobuf / GeneratedMessage .... Caused by: java.lang.ClassNotFoundException: com.google.protobuf.GeneratedMessage".

Then again I tried to add the missing dependencies

// 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]);
       }

      

Throws sameException ... Again, with a simple

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

      

I can see com.Google.protobuf.GeneratedMessage is present

Extracting dependencies:

   <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>

      

Can anyone help me to solve this problem?

+3


source to share


1 answer


It smells to me like a boot problem. Especially considering the fact that you are using an inline container that basically accepts whatever is in your project classpath.



What is the target container that you are deploying the application to? Perhaps if you try to run your test instead of the built-in container, you will at least see if this is really the problem or if there is something wrong with your deployment artifact.

+3


source







All Articles