2017-08-23 3 views
1

Ich versuche, JAR-Datei meiner App basierend auf Maven zu bauen. Also muss ich keine externen Jar-Bibliotheken in meinen Build aufnehmen. Ich brauche, dass meine Anwendung diese externe Abhängigkeit in Laufzeit vom lokalen Maven-Repository oder vom lokalen Ordner gibt, diese enthalten diese externen Bibliotheken. ich konfigurieren meine pom-Datei für diese Abhängigkeit wie folgt aus:Wie man ein maven ausführbares Glas mit externer Glasbibliothek baut?

<profiles> 
     <profile> 
      <id>compile</id> 
      <dependencies> 
       <dependency> 
        <groupId>groupId</groupId> 
        <artifactId>some.artifact</artifactId> 
        <version>1.0</version> 
       </dependency> 
      </dependencies> 
     </profile> 

und versucht, dieses Glas mit diesem Präfix -Pcompile auszuführen. Ich benutze diese answer.

Aber in der Laufzeit, wenn ich versuche, eine Methode auszuführen, die diese externe Bibliothek verwendet, habe ich java.lang.NoClassDefFoundError mit dem Namen meiner Klasse aus meiner externen Bibliothek.

Also, wie kann ich einen Build erstellen, der externe JAR-Bibliotheken aus dem lokalen Speicher verwendet?

+0

wie hier: https://stackoverflow.com/questions/11758594/how-do-i-put-all-required-jar-files-in-a -library-folder-inside-the-final-jar-fil – PeterMmm

+0

Es ist viel häufiger üblich, eine eigenständige ausführbare JAR-Datei zu erstellen, die alle Abhängigkeiten enthält. Erleichtert die Bereitstellung so viel einfacher und sicherer. https://stackoverflow.com/questions/574594/how-can-i-create-an-executable-jar-with-dependencies-using-maven?rq=1 – Thilo

+0

@Thilo: Dies funktioniert nicht, wenn Sie eine Bibliothek haben wie Bouncycastle in den Abhängigkeiten, da es ein signierter Krypto-Provider ist und jar-with-dependencies die jar-Signaturen zum Absturz bringt. – Robert

Antwort

0

So fand ich die Lösung, Gläser außerhalb der endgültigen Maven Build zu speichern. Ich musste nur dieses Glas zum Classpath mit korrektem Pfad hinzufügen. Dazu i fügen Sie diese pom.xml:

<plugin> 
       <groupId>org.apache.maven.plugins</groupId> 
       <artifactId>maven-jar-plugin</artifactId> 
       <version>3.0.2</version> 
       <configuration> 
        <archive> 
         <manifest> 
         <addClasspath>true</addClasspath> 
         <classpathPrefix>${project.build.finalName}.lib/</classpathPrefix> 
         <mainClass>your.mainClass</mainClass> 
         </manifest> 
         <manifestEntries> 
          <Class-Path>project-0.0.1-SNAPSHOT.lib/some.lib-1.1.jar</Class-Path> 
         </manifestEntries> 

        </archive> 
       </configuration>    
</plugin> 
Verwandte Themen