Maven dependencies in finaler JAR

Wenn ihr bei eurem Plugin nicht weiter kommt, könnt ihr hier euer Problem beschreiben und um Hilfe bitten.

Maven dependencies in finaler JAR

Beitragvon MoVo99 » Sa 11. Mär 2017, 17:20

Hallo Postcrafter-Community,

ich benutze zum erstem mal Maven, hänge aber leider gerade etwas fest. Ich habe einige Dependencies (neben Spigot und Bukkit). Konkret gesagt die ElasticSearch SDK und Gson. Beide haben als Scope compile eingestellt und werden so wie ich das sehe (und WinRAR auch) auch in die Finale JAR gepackt, die dann im Plugin Verzeichnis liegt. (Ist bei den Artifacts in IntelliJ eingestellt). Leider bekomme ich trotzdem immer, sobald ich eine Funktion der Libs verwenden möchte, eine NoClassDefinitonFound und ClassNotFoundException.

Code: Alles auswählen
  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <project xmlns="http://maven.apache.org/POM/4.0.0"
  3.          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  4.          xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  5.     <modelVersion>4.0.0</modelVersion>
  6.    <meinstuff group stuff/>
  7.     <version>1.0-SNAPSHOT</version>
  8.     <repositories>
  9.         <repository>
  10.             <id>spigot-repo</id>
  11.             <url>https://hub.spigotmc.org/nexus/content/repositories/snapshots/</url>
  12.         </repository>
  13.     </repositories>
  14.     <dependencies>
  15.         <dependency>
  16.             <groupId>com.google.code.gson</groupId>
  17.             <artifactId>gson</artifactId>
  18.             <version>2.8.0</version>
  19.             <scope>compile</scope>
  20.         </dependency>
  21.         <dependency>
  22.             <groupId>org.spigotmc</groupId>
  23.             <artifactId>spigot-api</artifactId>
  24.             <version>1.11.2-R0.1-SNAPSHOT</version>
  25.             <scope>provided</scope>
  26.         </dependency>
  27.         <dependency>
  28.             <groupId>org.bukkit</groupId>
  29.             <artifactId>bukkit</artifactId>
  30.             <version>1.11.2-R0.1-SNAPSHOT</version>
  31.             <scope>provided</scope>
  32.         </dependency>
  33.         <dependency>
  34.             <groupId>commons-httpclient</groupId>
  35.             <artifactId>commons-httpclient</artifactId>
  36.             <version>3.1</version>
  37.         </dependency>
  38.         <dependency>
  39.             <groupId>org.elasticsearch.client</groupId>
  40.             <artifactId>transport</artifactId>
  41.             <version>5.2.2</version>
  42.             <scope>compile</scope>
  43.         </dependency>
  44.     </dependencies>
  45. </project>


Weiß jemand wie ich den Fehler behebe?
Danke schonmal im Vorraus,
LG MoVo99
Benutzeravatar
MoVo99
 
Beiträge: 3
Registriert: Sa 2. Nov 2013, 15:03

Re: Maven dependencies in finaler JAR

Beitragvon monst12 » Do 16. Mär 2017, 11:05

Hey,

dafür gibt es das maven-shade-plugin, welches dafür sorgt, dass alle angegebenen Abhängigkeiten mit in die finale Jar eingearbeitet werden.
Code: Alles auswählen
  1. <plugins>
  2. <!-- Include dependencies -->
  3. <plugin>
  4. <groupId>org.apache.maven.plugins</groupId>
  5. <artifactId>maven-shade-plugin</artifactId>
  6. <version>2.3</version>
  7. <configuration>
  8. <artifactSet>
  9. <excludes>
  10. <exclude>javax.persistence:*</exclude>   
  11. <exclude>org.yaml:*</exclude>   
  12. </excludes>
  13. </artifactSet>
  14. <createDependencyReducedPom>false</createDependencyReducedPom>
  15. </configuration>
  16. <executions>
  17. <execution>
  18. <phase>package</phase>
  19. <goals>
  20. <goal>shade</goal>
  21. </goals>
  22. </execution>
  23. </executions>
  24. </plugin>
  25. </plugins>


Hierbei kann man sogar noch sehr stark darauf einwirken, was genau eingebunden oder ausgebunden wird.
Hier würden jetzt beispielsweise die Abhängigkeiten (Jede Version!) "javax.persistence" und "org.yaml" ausgebunden.
Falls du nichts ausbinden möchtest kannst du einfach den <artifactSet>-Bereich entfernen.
Wichtig ist nur, dass du dann dein Programm mit "clean install" baust.
Soweit die Theorie.

MfG
monst12
Benutzeravatar
monst12
 
Beiträge: 239
Registriert: Sa 19. Apr 2014, 22:14


Zurück zu Hilfe und Support

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 10 Gäste

cron