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

Antimo Di Comite (JIRA) issues at jboss.org
Sun Oct 19 12:56:35 EDT 2014


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

Antimo Di Comite commented on SHRINKRES-211:
--------------------------------------------

Hi Karel, 
i was tryng to run test using embedded container. 
So as you suggest i have switched to managed container (Jboss AS 7.1) , now the error is different, so may be i should ask for info in another thread or on other forum (don't know it it's a bug at this point)?

New dependency managment
{code}

   <dependencyManagement>
        <dependencies>
        <dependency>
            <groupId>org.jboss.shrinkwrap.resolver</groupId>
            <artifactId>shrinkwrap-resolver-bom</artifactId>
            <version>2.1.2</version>
            <scope>test</scope>
            <type>pom</type>
        </dependency>
        <dependency>
            <groupId>org.jboss.arquillian</groupId>
            <artifactId>arquillian-bom</artifactId>
            <version>1.1.5.Final</version>
            <scope>test</scope>
            <type>pom</type>
        </dependency>
        </dependencies>
    </dependencyManagement>
{code}

Then
I have to add 
{code}

        <dependency>
            <groupId>org.jboss.arquillian.core</groupId>
            <artifactId>arquillian-core-api</artifactId>
            <version>1.1.4.Final</version>
            <scope>test</scope>
        </dependency>
{code}

Because i have a 
{code}
Caused by: java.lang.NoClassDefFoundError: org/jboss/arquillian/core/api/threading/ExecutorService
{code}


And now the deploy on local instance of Jboss seems to work fine ( i will test with a simpler test as soon as i have a little time but  i think all is fine)

Essentially the problem is to add a jar dependencies present in maven (mistral-be) to the deployed test (see previous comment in this post).
Finally i use this code
{code}

  String str = "C:\\IntellijProject\\Import***\\import****\\migrazione****-be\\pom.xml";
        JavaArchive pomFiles = ShrinkWrap.create(MavenImporter.class)
                .loadPomFromFile(str).importBuildOutput().as(JavaArchive.class);

/* https://github.com/shrinkwrap/resolver/blob/master/README.asciidoc#resolution-of-artifacts-defined-in-pom-files */
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++) {
            pomFiles = pomFiles.merge(mistral_be[i]);
}

pomFiles.as(ZipExporter.class).exportTo(new File ("C:\\temp\\res.zip"));
{code}

It generate quite a big zip file only to check the result, but while try'n to deploy to jboss 7.1.1
{code}

18:46:17,003 INFO  [org.jboss.as.repository] (management-handler-thread - 2) JBAS014900: Content added at location C:\jboss\jboss-as-7.1.1.Final\standalone\data\content\bc\b6fd502db2696342419c17a6d2ed82a4176a4e\content
18:46:17,008 INFO  [org.jboss.as.server.deployment] (MSC service thread 1-8) JBAS015876: Starting deployment of "arquillian-service"
{code}

I have an error:

{code}

org.jboss.arquillian.container.spi.client.container.DeploymentException: Could not deploy to container: {"JBAS014671: Failed services" => {"jboss.deployment.unit.\"postImportBE-1.0-SNAPSHOT.jar\".STRUCTURE" => "org.jboss.msc.service.StartException in service jboss.deployment.unit.\"postImportBE-1.0-SNAPSHOT.jar\".STRUCTURE: Failed to process phase STRUCTURE of deployment \"postImportBE-1.0-SNAPSHOT.jar\""}}
{code}


As i see in the app server log it is
{code}

Caused by: java.lang.SecurityException: Invalid signature file digest for Manifest main attributes.
{code}

I see in the META_INF of the zipped file directory a lot o files coming from transitive dependencies of mistral-be, so the problem could be this. Is there anyway to generate a JAR file with a valid signature? Or may be i am using a wrong aprroach to solve this problem (contruct jar in another way or similar idea)?
{code}
And why the dependencies in pom:
      <dependency>
        <groupId>it.**.mistral</groupId>
        <artifactId>mistral-be</artifactId>
        <version>0.1.0</version>
        <scope>compile</scope>  
     </dependency>
{code}

is not directly impor by this instruction? Did i miss something?
{code}
String str = "C:\\IntellijProject\\Import***\\import****\\migrazione****-be\\pom.xml";
        JavaArchive pomFiles = ShrinkWrap.create(MavenImporter.class)
                .loadPomFromFile(str).importBuildOutput().as(JavaArchive.class);
{code}


Thank you
Antimo


> 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