[shrinkwrap-issues] [JBoss JIRA] (SHRINKRES-211) java.lang.NoClassDefFoundError: com/google/protobuf/GeneratedMessage

Karel Piwko (JIRA) issues at jboss.org
Mon Oct 13 10:35:41 EDT 2014


    [ https://issues.jboss.org/browse/SHRINKRES-211?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13011182#comment-13011182 ] 

Karel Piwko edited comment on SHRINKRES-211 at 10/13/14 10:35 AM:
------------------------------------------------------------------

Hi Antimo,

I'm a bit confused here. Where does this CNFE happens? During tests? During deployments? Somewhere else? Do I understand correctly that {{ merge.toString(true) }} prints that {{ com.google.protobuf.GeneratedMessage }} file is present?

I guess this is a classloader problem. As you are using embedded container, that protobuf class is not present on it's classpath. Any chance you can run with managed container instead (separated JVM)? Or can you provide output of dependency:tree ?


was (Author: kpiwko):
Hi Antimo,

I'm a bit confused here. Where does this CNFE happens? During tests? During deployments? Somewhere else? Do I understand correctly that {{merge.toString(true) }} prints that com.google.protobuf.GeneratedMessage file is present?

I guess this is a classloader problem. As you are using embedded container, that protobuf class is not present on it's classpath. Any chance you can run with managed container instead (separated JVM)? Or can you provide output of dependency:tree ?

> java.lang.NoClassDefFoundError: com/google/protobuf/GeneratedMessage
> --------------------------------------------------------------------
>
>                 Key: SHRINKRES-211
>                 URL: https://issues.jboss.org/browse/SHRINKRES-211
>             Project: ShrinkWrap Resolvers
>          Issue Type: Bug
>          Components: maven
>    Affects Versions: 2.1.0
>         Environment: Windows 7
>            Reporter: Antimo Di Comite
>              Labels: testsuite_stability
>
> I'm having trouble creating a JUnit test using a pom.xml dependency.
> The test are being run with Arquillian
> @RunWith(Arquillian.class)
> In this method
> {code}
> @Deployment
> public static JavaArchive createDeployment() {
> First, I create a JavaArchive with the package of the project I'm 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");
> {code}
> Then when I launch the test, there are some missing dependencies
> Unable to resolve any beans for Types: [class it.**.**.be.service.EnvironmentRootService]
> present in this dependency
> {code}
>       <dependency>
>         <groupId>it.**.mistral</groupId>
>         <artifactId>mistral-be</artifactId>
>         <version>0.1.0</version>
>         <scope>compile</scope>  
>      </dependency>
> {code}
> I have tried lots of different things to add these dependencies, the best one seems to be using the 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)
> {code}
> JavaArchive[] archives = Maven.resolver().loadPomFromFile(path_to_pom_file). importDependencies(ScopeType.TEST,ScopeType.COMPILE). resolve().withTransitivity().as(JavaArchive.class);
> {code}
> or
> {code}
> Maven.resolver().loadPomFromFile("/path/to/pom.xml").importRuntimeDependencies() .resolve().withTransitivity().asFile();
> {code}
> The dependency is ignored in either way (i'm missing something?)
> b)
> {code}
> 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]);
> }
> {code}
> With a simple
> {code}
> System.out.println(merge.toString(true));
> {code}
> I can see that all files from dependencies are present! Anyway I use local repository workoffline() Maybe I am missing some dependencies?
> But exiting the method with a
> {code}
> return merge;
> throws a "java.lang.NoClassDefFoundError: com/google/protobuf/GeneratedMessage....Caused by: java.lang.ClassNotFoundException: com.google.protobuf.GeneratedMessage" error.
> {code}
> Adding another dependencies to protobuf :
> {code}
> // Trym'g to add protobuf dependencies
> JavaArchive[] prtoo_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(proto_buf[i]);
>         }
> {code}
> Keep ending with the same error
> throws a "java.lang.NoClassDefFoundError: com/google/protobuf/GeneratedMessage
> These are an extract of dependencies in pom.xml:
> {code}
>        <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>
> {code}



--
This message was sent by Atlassian JIRA
(v6.3.1#6329)


More information about the shrinkwrap-issues mailing list