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 <bickle.la...@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-unsubscr...@maven.apache.org
For additional commands, e-mail: users-h...@maven.apache.org

Reply via email to