# JLink



## Roland13 (28. Sep 2018)

Ich verwendet aktuell 2 jar-Dateien: All.jar enthält alle eigenen Teile und AllT.jar enthält alle Treiber von die zum Teil datenbankabhängig sind.
Aktuell starte ich das Programm über eine jnlp-Datei oder alternativ über eine bat bzw sh-Datei, z.B.: 
	
	
	
	





```
java -Dfile.encoding=Cp850 -Duser.country=AT -Djava.awt.headless=true -Xmx400m -Xss8m -cp ./jar/All.06:./jar/AllMy8.04 AU_AServer2012 ...
```
Nun die Frage dazu:
wie erstelle ich eine bzw mehrere exe-Datei mit JLink die beide jar-Dateien enthalten.
Ich bräuchte sie für sämtliche Betriebsysteme, 4 verschiedene Datenbanken (4 verschiedene AllT.jar) und es sollten unterschiedliche Programme aufgerufen werden (AU_Timer, AU_Terminal, AU_AServer2012, Run2_All_Unlimited)


----------



## dzim (28. Sep 2018)

Erst einmal anfangen zu lesen:

https://docs.oracle.com/javase/9/tools/jlink.htm#JSWOR-GUID-CECAC52B-CFEE-46CB-8166-F17A8E9280E9

https://dzone.com/articles/jlink-in-java-9

https://jaxenter.de/java-9-tutorial-56664
https://jaxenter.de/java-9-tutorial-jlink-59103
https://jaxenter.de/java-9-migration-59148

Dann muss dir klar sein: So etwas wie Delta-Packages wie für Eclipse (speziell SWT, setzt aber immer noch ein lokal installiertes JRE/JDK voraus) gibt es für jlink (oder das leider gerade ins Nirvana beförderte java(fx)packager) nicht.
Das heisst: Willst du eine auf deine Anwendung zugeschnittene Runtime, musst du (wie schon zu java(fx)packager-Zeiten) den Build auf jedem Betriebssystem separat durchführen, für jede DB und jede App-Variation (oder du steuerst das weiterhin über plattformspezifische Skripte mit Program-Parametern). So oder so solltest du dir wohl passenden Build-Skripte für die jeweilige Platform zulegen.

Alles weitere: Studieren! "Leider" musste ich bisher noch nicht jlink verwenden und hab in der Vergangenheit auf javapackager gesetzt. Da dieser mit Java11 weg ist und Kotlin kein Java 9+ braucht, hatte ich bisher noch keine Zeit und Notwendigkeit all unsere Applikationen plus Runtime auf Java 9/10/11 umzustellen und somit jlink nutzen zu müssen. Ich hoffe, die Anstösse helfen dennoch.


----------



## Roland13 (1. Okt 2018)

Leider scheitere ich schon beim ersten Schritt davon.
Wenn ich mit folgendem Befehl compiliere funktioniert es:
	
	
	
	





```
.\jdkn10_02\bin\javac -d out src\*.java
```
Es wird die Test-Klasse Hello vom Verzeichnis src kompiliert und ins Verzeichnis out gegeben.
Aber der Befehl:
	
	
	
	





```
.\jdkn10_02\bin\javac -module-source-path src -d out -m demoModule
```
 liefert den Fehler:
	
	
	
	





```
javac: invalid flag: -module-source-path
Usage: javac <options> <source files>
use --help for a list of possible options
```
Was muss ich anders angeben, damit ich JLink verwenden kann und den 2. Schritt probieren kann?


----------



## mihe7 (1. Okt 2018)

Roland13 hat gesagt.:


> Was muss ich anders angeben,




```
javac -help
...
   --module-source-path <module-source-path>
```
Ich sehe da zwei Bindestriche vor dem Flag.


----------

