[Java] Applicatie plugins & library packing (maven shading?)

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • Gelunox
  • Registratie: April 2010
  • Laatst online: 15-06 10:16

Gelunox

Hardware addicted

Topicstarter
Beste Medetweakers.

Ik ben op het moment bezig met een Java HTTP webserver hobbyproject. Ik probeer een applicatie te maken die op een vergelijkbare manier plugins laad zoals Bukkit dit doet. Nu heb ik vanalles gelezen over het toevoegen van libraries aan plugin jars, en over dat dat wel is fout kan gaan op het moment dat twee plugins dezelfde libraries packagen.

Ik heb m'n javaproject laatst geconverteerd naar een maven project i.v.m. dependencies die gezellig allemaal via maven werken. Alleen snap ik maven voor nog geen halve meter. Dependencies toevoegen aan pom.xml lukt nog, maar in de tutorials die ik gevonden heb zie ik ook dingen staan als "maven plugins" en "build goals" (helaas zonder uitleg die me helpt te begrijpen wat het nou doet).

Ik werk met de Eclipse Maven m2e plugin en wil het liefst niet de commandline in duiken.

wanneer ik zoek met termen als "java plugin library shading" of "java plugin maven shading" vind ik alles behalve wat ik zoek. Ik heb op een vergelijkbare (iets meer samengevatte) manier ook mijn vraag achter gelaten op stackoverflow alleen daar wordt geen gehoor aan gegeven.
Ik heb het ook bij de docenten van mijn studie geprobeert te vragen, alleen zijn dat meer C# fanaten en schiet ik er weinig mee op.

Wat al lukt:
- het draaien van de server;
- het laden van jars (Classloader) zonder 3rd party libraries;
- het exporteren van plugins zonder dependencies ( project -> export... -> jar file );
- het toevoegen van dependencies via maven;

Wat nog niet lukt:
- maven m'n project laten compilen;
- het exporteren van plugins met dependencies (zonder er een runnable jar van te maken);


TL;DR;
Zou iemand mij een duwtje in de goede richting kunnen geven met hoe ik maven m'n project kan laten compilen en hoe ik maven shading moet toepassen. Of misschien is er een andere, simpelere, oplossing voor mijn probleem?

Voor wie geïnteresseerd is in waarom ik hieraan begonnen ben. Ik heb een rothekel aan PHP, gebruik veel liever java. Maar Apache Tomcat is me veelste veel gedoe.

PC: R9 5950X | 32GB | VEGA 64 Liquid Edition


Acties:
  • 0 Henk 'm!

  • Kettrick
  • Registratie: Augustus 2000
  • Laatst online: 11:21

Kettrick

Rantmeister!

De eerste stap is je project te laten compilen, en daarbij is de commandline toch echt onmisbaar.

Het is zo simpel als een "mvn clean install", maar daarna weet je wel precies wat er aan de hand is. Verschillende IDE's hebben verschillende ideeen over maven en het kan best zijn dat je maven project het prima doet onder eclipse, maar niet op de command line, of de eclipse installatie van je buurman.

Als een command line build niet werkt is maven meestal redelijk behulpzaam,vaak zal er een dependency ontbreken of iets anders in je project niet goed gaan.

De maven shade plugin komt met een hele boel andere mogelijk problemen, als je project nog niet eens compileert zou ik me daar nog even niet mee bezig houden :).

Het is overigens de moeite waard om even te googlen op 'maven lifecycle', dan kom je wel wat goede info tegen.

Acties:
  • 0 Henk 'm!

  • Gelunox
  • Registratie: April 2010
  • Laatst online: 15-06 10:16

Gelunox

Hardware addicted

Topicstarter
Kettrick schreef op woensdag 19 november 2014 @ 16:35:
De eerste stap is je project te laten compilen, en daarbij is de commandline toch echt onmisbaar.

Het is overigens de moeite waard om even te googlen op 'maven lifecycle', dan kom je wel wat goede info tegen.
zowel de m2e plugin, als commandline melden het volgende wanneer ik maven install doe
code:
1
2
3
4
5
6
7
[INFO] ----------------------------------------
[INFO] BUILD SUCCESS
[INFO] ----------------------------------------
[INFO] Total time: 4.904 s
[INFO] Finished at: 2014-11-19T16:47:35+01:00
[INFO] Final Memory: 15M/160M
[INFO] ----------------------------------------

dus dat compilen gaat helemaal prima :9

kan de boel alleen niet runnen want "no main manifest attribute in server.jar". + de dependencies van het project zitten niet in/bij de jar.

ik zal dat maven lifecycle eens bekijken, bedankt voor de tip!

[ Voor 3% gewijzigd door Gelunox op 19-11-2014 16:53 ]

PC: R9 5950X | 32GB | VEGA 64 Liquid Edition


Acties:
  • 0 Henk 'm!

  • Kettrick
  • Registratie: Augustus 2000
  • Laatst online: 11:21

Kettrick

Rantmeister!

Dit zijn twee verschillende problemen, beide zijn redelijk makkelijk op te lossen. De juiste zoekterm hiervoor is 'maven fat jar'. :)

Acties:
  • 0 Henk 'm!

  • Gelunox
  • Registratie: April 2010
  • Laatst online: 15-06 10:16

Gelunox

Hardware addicted

Topicstarter
Kettrick schreef op woensdag 19 november 2014 @ 16:56:
Dit zijn twee verschillende problemen, beide zijn redelijk makkelijk op te lossen. De juiste zoekterm hiervoor is 'maven fat jar'. :)
SuperKudo's voor de zoekterm die er voor zorgt dat ik er (volgensmij) ineens een maven shaded jar uit kan laten pruttelen (MET manifest main class).

als dit werkt heb ik nog een vraag, ik heb nu in m'n /target 3 jars staan.
  • original-server.jar
  • server.jar
  • server-shaded.jar
die eerste is neem ik aan alleen de gecompileerde versie van m'n project zonder dependencies whatsoever. Het verschil tussen die andere twee kan ik zo even snel niet zien

PC: R9 5950X | 32GB | VEGA 64 Liquid Edition


Acties:
  • 0 Henk 'm!

  • SPee
  • Registratie: Oktober 2001
  • Laatst online: 10-09 19:52
Voor meer informatie over maven is er ook een boek met nuttige informatie.

Het maken van een "fat jar" is mogelijk, zonder dat deze runnable wordt. De enige manier hoe dit in java-land gebeurd is door de startup class in de manifest.mf bestand in de jar. Met of zonder, het is gewoon een library.
De fat jar zorgt er wel voor dat alle classes in de jar zitten. Dat kan classloader issues veroorzaken als dezelfde class (van een andere versie) in een andere jar zitten.
Maven wordt gebruikt om die verschillende versies te beheren. Maar de externe jars worden via de classpath gekoppeld (kan ook via de manifest).

let the past be the past.

Pagina: 1