1
0
Fork
You've already forked JavaTests
0
Dynamically load classes and call methods
  • Java 100%
Kristian Koehntopp fda77fa436
Update README.md
2024年03月03日 12:42:52 +01:00
dependent init 2024年03月03日 12:31:52 +01:00
external init 2024年03月03日 12:31:52 +01:00
main init 2024年03月03日 12:31:52 +01:00
.gitignore init 2024年03月03日 12:31:52 +01:00
JavaTests.iml init 2024年03月03日 12:31:52 +01:00
LICENSE Create LICENSE 2024年03月03日 12:33:18 +01:00
pom.xml init 2024年03月03日 12:31:52 +01:00
README.md Update README.md 2024年03月03日 12:42:52 +01:00

Build

$ mvn clean package ...

Usage

$ java -jar main/target/main-1.0-SNAPSHOT.jar
file:.../dependent/target/dependent-1.0-SNAPSHOT.jar
file:.../external/target/external-1.0-SNAPSHOT.jar
file:.../main/target/main-1.0-SNAPSHOT.jar
Klasse wurde geladen von: file:.../external/target/external-1.0-SNAPSHOT.jar
New Hello from External!
Hello from Dependent!

Wir bauen uns eine Liste aller jar-Dateien im aktuellen Verzeichnis oder darunter. Wir bauen uns einen classLoader und laden die Klasse de.koehntopp.java.External aus irgendeinem dieser Jars. Wir rufen dann auf dieser Klasse public static main(String[] args) mit leerer Argumentliste auf, indem wir Reflection und .invoke()` verwenden.

Die External-Klasse hat eine deklarierte Dependency auf de.koehnntopp.java.Dependent. Wir wurden dort statisch Dependent.sayHello() auf.

Wir könnten den Stunt mit dem classLoader und der .invoke()-Methode wiederholen. Weil wir das nicht tun, müssen wir die Depencency zu Dependent in der pom.xml von External deklarieren.

Maven

/pom.xml

Das Top-Level pom.xml deklariert die drei Untermodule,

 <modules>
 <module>main</module>
 <module>external</module>
 <module>dependent</module>
 </modules>

Es muß auch <packaging>pom</packaging> mit deklarieren, damit das funktioniert.

main/pom.xml

Das main/pom.xml will einen Main-Class: de.koehntopp.java.Main Eintrag in die MANIFEST.MF haben. Für diese eine Zeile muß der ganze Quatsch in <build/> deklariert werden.

external/pom.xml

Das external/pom.xml will eine Dependency auf depdendent deklarieren. Dazu muß dort der <dependencies><depdendency /></dependencies>-Block erstellt werden.

depdencies/pom.xml

Hier ist nix besonderes.