You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@maven.apache.org by Laura Bickle <bi...@gmail.com> on 2011/04/30 02:02:46 UTC
Installed local dependency compiles in maven, but resulting jar
errors with NoClassDefFound on execution
The code imports classes from a compiled jar file. It can't access these
classes even though I've installed the jar file in my local repository,
listed it as a dependency in my pom.xml file, and it compiles happily. I've
tried changing plugins and configuration based on advice in the archive, but
it has only changed my error.
Details
----------
I have some java code that is dependent on classes contained within a
pre-compiled, third-party proprietary jar file called aipartner_api.jar. I
have installed this jar in my local repository thusly:
mvn install:install-file -Dfile=. \
-DgroupId=com.adinfuse.api \
-DartifactId=aipartner_api.jar \
-Dversion=1.0 \
-Dpackaging=jar \
-DgeneratePom=true
so a copy lives here:
YPCMC10030:target lbickle$ ls
/Users/lbickle/.m2/repository/com/adinfuse/api/aipartner_api/1.0/
aipartner_api-1.0.jar aipartner_api-1.0.pom
mvn clean package executes happily:
YPCMC10030:api lbickle$ mvn clean package
[INFO] Scanning for projects...
[INFO] ------------------------------------------------------------------------
[INFO] Building Mobile Profiling Project -- Reporting API
[INFO] task-segment: [clean, package]
[INFO] ------------------------------------------------------------------------
[INFO] [clean:clean {execution: default-clean}]
[INFO] Deleting directory /Users/lbickle/Work/svn/aas/mpp/api/target
[INFO] [resources:resources {execution: default-resources}]
[WARNING] Using platform encoding (MacRoman actually) to copy filtered
resources, i.e. build is platform dependent!
[INFO] skip non existing resourceDirectory
/Users/lbickle/Work/svn/aas/mpp/api/src/main/resources
[INFO] [compiler:compile {execution: default-compile}]
[INFO] Compiling 1 source file to
/Users/lbickle/Work/svn/aas/mpp/api/target/classes
[INFO] [resources:testResources {execution: default-testResources}]
[WARNING] Using platform encoding (MacRoman actually) to copy filtered
resources, i.e. build is platform dependent!
[INFO] skip non existing resourceDirectory
/Users/lbickle/Work/svn/aas/mpp/api/src/test/resources
[INFO] [compiler:testCompile {execution: default-testCompile}]
[INFO] No sources to compile
[INFO] [surefire:test {execution: default-test}]
[INFO] No tests to run.
[INFO] [jar:jar {execution: default-jar}]
[INFO] Building jar: /Users/lbickle/Work/svn/aas/mpp/api/target/reportingapi.jar
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESSFUL
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 3 seconds
[INFO] Finished at: Fri Apr 29 14:21:16 PDT 2011
[INFO] Final Memory: 22M/81M
[INFO] ------------------------------------------------------------------------
When I used the maven-jar-plugin, I got an error, but, I read the
archive and someone with a similar problem was pointed to this post:
http://thomassundberg.wordpress.com/2011/03/05/create-an-executable-jar-from-maven/
Here's the error:
YPCMC10030:target lbickle$ java -jar reportingapi.jar
Exception in thread "main" java.lang.NoClassDefFoundError:
com/adinfuse/api/Reporting
Caused by: java.lang.ClassNotFoundException: com.adinfuse.api.Reporting
at java.net.URLClassLoader$1.run(URLClassLoader.java:202)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:190)
at java.lang.ClassLoader.loadClass(ClassLoader.java:307)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
at java.lang.ClassLoader.loadClass(ClassLoader.java:248)
So, I changed my pom.xml to this:
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
http://maven.apache.org/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.atti.api</groupId>
<artifactId>reportingapi</artifactId>
<version>1.0-SNAPSHOT</version>
<name>Mobile Profiling Project -- Reporting API</name>
<packaging>jar</packaging>
<dependencies>
<dependency>
<groupId>com.adinfuse.api</groupId>
<artifactId>aipartner_api</artifactId>
<version>1.0</version>
</dependency>
</dependencies>
<build>
<finalName>${artifactId}</finalName>
<pluginManagement>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-assembly-plugin</artifactId>
<version>2.2.1</version>
<executions>
<execution>
<id>package-jar-with-dependencies></id>
<phase>package</phase>
<goals>
<goal>single</goal>
</goals>
<configuration>
<appendAssemblyId>false</appendAssemblyId>
<descriptorRefs>
<descriptorRef>jar-with-dependencies</descriptorRef>
</descriptorRefs>
<archive>
<manifest>
<mainClass>com.api.testcall.testcall</mainClass>
</manifest>
</archive>
</configuration>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-dependency-plugin</artifactId>
<version>2.2</version>
<executions>
<execution>
<id>copy-dependencies</id>
<phase>package</phase>
<goals>
<goal>copy-dependencies</goal>
</goals>
<configuration>
<includeArtifactIds>aipartner_api</includeArtifactIds>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</pluginManagement>
</build>
</project>
And now I get error instead:
YPCMC10030:api lbickle$ java -jar target/reportingapi.jar
Failed to load Main-Class manifest attribute from
target/reportingapi.jar
The imports look like this:
import com.adinfuse.api.*;
import com.adinfuse.api.cs.Advertisement;
import com.adinfuse.api.cs.ContentPlacement;
import com.adinfuse.api.cs.Creative;
import com.adinfuse.api.rpt.*;
import com.adinfuse.api.org.*;
The offending line is this:
Reporting rpt =
AdInfuseAPI.getReporting("intouch.adinfuse.com");
The Reporting class is in com.adinfuse.api.
I've tried googling "maven java jar java.lang.ClassNotFoundError",
"maven java jar java.lang.NoClassDefFoundError" and "maven import
dependency"
I've also tried searching the mailing list archives, but I don't see
anything it suggests to do that I haven't already done.
Any help is appreciated!
Re: Installed local dependency compiles in maven, but resulting jar
errors with NoClassDefFound on execution
Posted by Benson Margulies <bi...@gmail.com>.
Listing things in your pom has no effect on the jar file that comes
out at the end. If you want to build a self-contained jar, you need to
read up on the maven-shade-plugin or the appassembler.
On Fri, Apr 29, 2011 at 8:02 PM, Laura Bickle <bi...@gmail.com> wrote:
> The code imports classes from a compiled jar file. It can't access these
> classes even though I've installed the jar file in my local repository,
> listed it as a dependency in my pom.xml file, and it compiles happily. I've
> tried changing plugins and configuration based on advice in the archive, but
> it has only changed my error.
>
> Details
> ----------
> I have some java code that is dependent on classes contained within a
> pre-compiled, third-party proprietary jar file called aipartner_api.jar. I
> have installed this jar in my local repository thusly:
>
> mvn install:install-file -Dfile=. \
> -DgroupId=com.adinfuse.api \
> -DartifactId=aipartner_api.jar \
> -Dversion=1.0 \
> -Dpackaging=jar \
> -DgeneratePom=true
> so a copy lives here:
>
> YPCMC10030:target lbickle$ ls
> /Users/lbickle/.m2/repository/com/adinfuse/api/aipartner_api/1.0/
> aipartner_api-1.0.jar aipartner_api-1.0.pom
>
> mvn clean package executes happily:
>
> YPCMC10030:api lbickle$ mvn clean package
> [INFO] Scanning for projects...
> [INFO] ------------------------------------------------------------------------
> [INFO] Building Mobile Profiling Project -- Reporting API
> [INFO] task-segment: [clean, package]
> [INFO] ------------------------------------------------------------------------
> [INFO] [clean:clean {execution: default-clean}]
> [INFO] Deleting directory /Users/lbickle/Work/svn/aas/mpp/api/target
> [INFO] [resources:resources {execution: default-resources}]
> [WARNING] Using platform encoding (MacRoman actually) to copy filtered
> resources, i.e. build is platform dependent!
> [INFO] skip non existing resourceDirectory
> /Users/lbickle/Work/svn/aas/mpp/api/src/main/resources
> [INFO] [compiler:compile {execution: default-compile}]
> [INFO] Compiling 1 source file to
> /Users/lbickle/Work/svn/aas/mpp/api/target/classes
> [INFO] [resources:testResources {execution: default-testResources}]
> [WARNING] Using platform encoding (MacRoman actually) to copy filtered
> resources, i.e. build is platform dependent!
> [INFO] skip non existing resourceDirectory
> /Users/lbickle/Work/svn/aas/mpp/api/src/test/resources
> [INFO] [compiler:testCompile {execution: default-testCompile}]
> [INFO] No sources to compile
> [INFO] [surefire:test {execution: default-test}]
> [INFO] No tests to run.
> [INFO] [jar:jar {execution: default-jar}]
> [INFO] Building jar: /Users/lbickle/Work/svn/aas/mpp/api/target/reportingapi.jar
> [INFO] ------------------------------------------------------------------------
> [INFO] BUILD SUCCESSFUL
> [INFO] ------------------------------------------------------------------------
> [INFO] Total time: 3 seconds
> [INFO] Finished at: Fri Apr 29 14:21:16 PDT 2011
> [INFO] Final Memory: 22M/81M
> [INFO] ------------------------------------------------------------------------
>
> When I used the maven-jar-plugin, I got an error, but, I read the
> archive and someone with a similar problem was pointed to this post:
>
> http://thomassundberg.wordpress.com/2011/03/05/create-an-executable-jar-from-maven/
>
> Here's the error:
>
> YPCMC10030:target lbickle$ java -jar reportingapi.jar
> Exception in thread "main" java.lang.NoClassDefFoundError:
> com/adinfuse/api/Reporting
> Caused by: java.lang.ClassNotFoundException: com.adinfuse.api.Reporting
> at java.net.URLClassLoader$1.run(URLClassLoader.java:202)
> at java.security.AccessController.doPrivileged(Native Method)
> at java.net.URLClassLoader.findClass(URLClassLoader.java:190)
> at java.lang.ClassLoader.loadClass(ClassLoader.java:307)
> at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
> at java.lang.ClassLoader.loadClass(ClassLoader.java:248)
>
> So, I changed my pom.xml to this:
>
> <?xml version="1.0" encoding="UTF-8"?>
> <project xmlns="http://maven.apache.org/POM/4.0.0"
> xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
> xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
> http://maven.apache.org/maven-v4_0_0.xsd">
> <modelVersion>4.0.0</modelVersion>
> <groupId>com.atti.api</groupId>
> <artifactId>reportingapi</artifactId>
> <version>1.0-SNAPSHOT</version>
> <name>Mobile Profiling Project -- Reporting API</name>
> <packaging>jar</packaging>
> <dependencies>
> <dependency>
> <groupId>com.adinfuse.api</groupId>
> <artifactId>aipartner_api</artifactId>
> <version>1.0</version>
> </dependency>
> </dependencies>
>
> <build>
> <finalName>${artifactId}</finalName>
> <pluginManagement>
> <plugins>
> <plugin>
> <groupId>org.apache.maven.plugins</groupId>
> <artifactId>maven-assembly-plugin</artifactId>
> <version>2.2.1</version>
> <executions>
> <execution>
> <id>package-jar-with-dependencies></id>
> <phase>package</phase>
> <goals>
> <goal>single</goal>
> </goals>
> <configuration>
> <appendAssemblyId>false</appendAssemblyId>
> <descriptorRefs>
> <descriptorRef>jar-with-dependencies</descriptorRef>
> </descriptorRefs>
> <archive>
> <manifest>
> <mainClass>com.api.testcall.testcall</mainClass>
> </manifest>
> </archive>
> </configuration>
> </execution>
> </executions>
> </plugin>
> <plugin>
> <groupId>org.apache.maven.plugins</groupId>
> <artifactId>maven-dependency-plugin</artifactId>
> <version>2.2</version>
> <executions>
> <execution>
> <id>copy-dependencies</id>
> <phase>package</phase>
> <goals>
> <goal>copy-dependencies</goal>
> </goals>
> <configuration>
> <includeArtifactIds>aipartner_api</includeArtifactIds>
> </configuration>
> </execution>
> </executions>
> </plugin>
> </plugins>
> </pluginManagement>
> </build>
> </project>
>
>
> And now I get error instead:
>
> YPCMC10030:api lbickle$ java -jar target/reportingapi.jar
> Failed to load Main-Class manifest attribute from
> target/reportingapi.jar
>
>
> The imports look like this:
>
> import com.adinfuse.api.*;
> import com.adinfuse.api.cs.Advertisement;
> import com.adinfuse.api.cs.ContentPlacement;
> import com.adinfuse.api.cs.Creative;
> import com.adinfuse.api.rpt.*;
> import com.adinfuse.api.org.*;
>
> The offending line is this:
>
> Reporting rpt =
> AdInfuseAPI.getReporting("intouch.adinfuse.com");
>
> The Reporting class is in com.adinfuse.api.
>
> I've tried googling "maven java jar java.lang.ClassNotFoundError",
> "maven java jar java.lang.NoClassDefFoundError" and "maven import
> dependency"
>
> I've also tried searching the mailing list archives, but I don't see
> anything it suggests to do that I haven't already done.
>
> Any help is appreciated!
>
---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscribe@maven.apache.org
For additional commands, e-mail: users-help@maven.apache.org