2017-07-11 2 views
0

Ich habe Schwierigkeiten, eine ausführbare JAR-Datei mit Maven zu erzeugen. Ich fügte eine separate sqljdbc.jar Datei hinzu und legte sie in einen /lib Ordner und das Projekt ist fehlerfrei und in Eclipse oder IntelliJ lauffähig. JedochMaven: generierte JAR-Datei BegegnungsklasseNichtSchlagsfehler

wenn Maven, ich erzeugen die jar Datei mit:

mvn clean package 

und lief es mit dem folgenden Code:

java -jar target/etl-aggregation-0.0.1-SNAPSHOT.jar 

und bekam die folgende Meldung:

ClassNotFoundException e : java.lang.ClassNotFoundException: 
com.microsoft.sqlserver.jdbc.SQLServerDriver null 

Ich habe mehrere Methoden wie How can I create an executable JAR with dependencies using Maven? versucht und konnte noch nicht so Ich habe das Problem.

Dies ist der Build Teil meiner pom.xml Datei:

<build> 
    <resources> 
     <resource> 
      <directory>${project.basedir}</directory> 
      <includes> 
       <include>lib/*.jar</include> 
      </includes> 
     </resource> 
    </resources> 
    <plugins> 
     <!-- download source code in Eclipse, best practice and i don't know its usage here..--> 
     <plugin> 
      <groupId>org.apache.maven.plugins</groupId> 
      <artifactId>maven-eclipse-plugin</artifactId> 
      <version>2.9</version> 
      <configuration> 
       <downloadSources>true</downloadSources> 
       <downloadJavadocs>false</downloadJavadocs> 
      </configuration> 
     </plugin> 
     <plugin> 
      <groupId>org.apache.maven.plugins</groupId> 
      <artifactId>maven-dependency-plugin</artifactId> 
     </plugin> 

     <!-- Set a compiler level --> 
     <plugin> 
      <groupId>org.apache.maven.plugins</groupId> 
      <artifactId>maven-compiler-plugin</artifactId> 
      <version>2.3.2</version> 
      <configuration> 
       <source>1.8</source> 
       <target>1.8</target> 
      </configuration> 
     </plugin> 

     <plugin> 
      <groupId>org.apache.maven.plugins</groupId> 
      <artifactId>maven-jar-plugin</artifactId> 
      <configuration> 
       <archive> 
        <manifest> 
         <addClasspath>true</addClasspath> 
         <classpathPrefix>lib/</classpathPrefix> 
         <mainClass>com.etl_aggregation.app.App</mainClass> 
        </manifest> 
       </archive> 
      </configuration> 
     </plugin> 

     <!-- Maven Assembly Plugin --> 
     <plugin> 
      <groupId>org.apache.maven.plugins</groupId> 
      <artifactId>maven-assembly-plugin</artifactId> 
      <version>2.4.1</version> 
      <configuration> 
       <!-- get all project dependencies --> 
       <descriptorRefs> 
        <descriptorRef>jar-with-dependencies</descriptorRef> 
       </descriptorRefs> 
       <!-- MainClass in mainfest make a executable jar --> 
       <archive> 
        <manifest> 
         <mainClass>com.etl_aggregation.app.App</mainClass> 
        </manifest> 
       </archive> 

      </configuration> 
      <executions> 
       <execution> 
        <id>make-assembly</id> 
        <!-- bind to the packaging phase --> 
        <phase>package</phase> 
        <goals> 
         <goal>single</goal> 
        </goals> 
       </execution> 
      </executions> 
     </plugin> 
    </plugins> 
</build> 

Problem

gelöst I -cp lib/sqljdbc4.jar manuell hinzugefügt, um die jar und es funktionierte zu laufen.

+0

Nehmen wir an, wenn die JAR-Datei gepackt ist, enthält sie nicht den 'com.microsoft.sqlserver.jdbc.SQLServerDriver'. Sie müssen die JAR-Datei 'sqlserver.jdbc' in die' .m2'-Datei einfügen und die JAR-Datei erneut packen, da maven JAR-Dateien zuerst aus dem lokalen Repository holt. –

+0

Sie können auch eine Antwort auf Ihre eigene Frage erstellen und diese akzeptieren. –

Antwort

0

Früher, was ich dachte, es ist funktioniert den folgenden Befehl ausführen, die in diesem Fall, dass ich dachte, dass ich die sqljdbc4.jar Abhängigkeit Classpath von Hand ...

java -cp lib/sqljdbc4.jar -jar target/etl-aggregation-0.0.1-SNAPSHOT.jar

hinzugefügt, aber eigentlich was passiert ist Run a JAR file from the command line and specify classpath und der Grund, dass sie das Programm gestartet ist, dass ich die sqljdbc4.jar Abhängigkeit in meinem .m2 Repository auch manuell

hinzugefügt
mvn install:install-file -Dfile=lib/sqljdbc4.jar -DgroupId=com.microsoft.sqlserver \ 
    -DartifactId=sqljdbc4 -Dversion=4.0 -Dpackaging=jar 

, so dass das Programm es gerade als @Rajith Pemabandu vorgeschlagen hat.

+0

'-cp' funktioniert nicht, wenn' -jar' verwendet wird. Bei Verwendung von "-jar" muss der Klassenpfad im Manifest der JAR-Datei definiert werden. –

+1

Bitte fügen Sie Erklärungen zu Ihrer Antwort hinzu. –

+0

@MarkRotteveel Ja, Sie haben Recht ... –