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?
source to share
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.
source to share