Gewöhnliche Java-Anwendungen schützen
javaapp verarbeitet gewöhnliche Java-Anwendungen mit Hauptklasse. Es erzeugt das geschützte Archiv, die VLX JRE für jede Zielplattform sowie die Startskripte.
1. Vorgehen in der GUI
-
Wählen Sie auf der Seite „Anwendungstyp“ die Option Java-Anwendung.

-
Wählen Sie das Eingabe-JAR, die mitgelieferte Java-Version und die Zielplattformen und entscheiden Sie sich für den einfachen oder den erweiterten Modus.

-
Tragen Sie im erweiterten Modus bei Bedarf die Hauptklasse ein und konfigurieren Sie JVM-Startoptionen, JavaFX-Einstellungen und Ausschlussregeln. Der einfache Modus überspringt diese Seite. Was die einzelnen Optionen bewirken, steht unter Protector4J Erweiterte Moduseinstellungen.

-
Wählen Sie das Ausgabeverzeichnis, prüfen Sie die Zusammenfassung und klicken Sie auf Schutz ausführen.

2. CLI-Beispiele
Wenn das Manifest bereits die korrekte Main-Class deklariert:
p4j javaapp app.jar dist
Fehlt im Manifest die Main-Class oder soll eine andere Klasse starten, geben Sie sie mit --main an:
p4j javaapp app.jar dist --main com.example.Main
Hauptklasse und JVM-Optionen zusammen setzen:
p4j javaapp app.jar dist \
--main com.example.Main \
--jvm-option -Xms512m \
--jvm-option -Xmx2g
Nur einen Teil der Anwendung schützen:
p4j javaapp app.jar dist \
--protect 'com.example.core.**' \
--exclude 'com.example.core.dto.**'
Kompatibilitätsscan und automatisches Anwenden der Empfehlungen:
p4j javaapp app.jar --compat-scan
p4j javaapp app.jar dist --compat-apply
Die beiden Optionen lassen sich nicht gemeinsam verwenden. Sie unterscheiden sich so:
| Option | Wirkung | Wann sinnvoll |
|---|---|---|
--compat-scan | Untersucht das Eingabe-JAR, gibt Risiken und Konfigurationsempfehlungen aus und endet. Es wird nichts encodiert und kein dist erzeugt, daher ist kein Ausgabeverzeichnis nötig. | Lesen Sie den Bericht zuerst beim erstmaligen Schutz, nach dem Aktualisieren von Abhängigkeiten, nach Änderungen am Schutzumfang und bei der Suche nach Kompatibilitätsproblemen. |
--compat-apply | Scannt, übernimmt die konservativen Empfehlungen und encodiert anschließend die Ausgabe. Daher ist ein Ausgabeverzeichnis erforderlich. | Zum Abschließen der Paketierung, wenn Sie das Scanergebnis gelesen und die Empfehlungen akzeptiert haben. Eignet sich auch für wiederholte Builds und CI-Pipelines mit bereits geprüften Regeln. |
Bei javaapp kann --compat-apply anhand des Scanergebnisses Ausschlussregeln ergänzen sowie ZIP-Overlay, JavaFX und Archivsuffix anpassen. Für diese drei hat ein auf der Kommandozeile ausdrücklich gesetzter Wert Vorrang. Empfohlene Ausschlüsse werden standardmäßig mit Ihren eigenen --exclude-Mustern zusammengeführt; geben Sie zusätzlich --no-compat-excludes an, wenn Sie das nicht möchten. Der Scanner führt nur eine statische heuristische Analyse durch. Probleme, die eine Quelltextänderung erfordern, behebt --compat-apply nicht, und die paketierte Anwendung braucht weiterhin Regressionstests auf der Zielplattform.
Die übrigen CLI-Befehle, alle Optionen, Umgebungsvariablen und Automatisierungsbeispiele finden Sie in der CLI-Referenz.
3. Aufbau der Ausgabe
dist/
├── app.p4jx # mit --archive-suffix jar wird daraus app.jar
├── vlxjre/ # zur Archiv- und Zielplattform passende Runtime
├── lib/ # Abhängigkeiten aus dem Manifest-Class-Path, optional
├── run.sh
├── run.command
├── run.bat
└── README.md
Ressourcen, die keine Klassen sind, liegen in der öffentlichen Ressourcensicht des P4JX-Archivs. Geschützte Klassen zeigen Scannern nur einen Metadaten-Stub; die echten Methodenrümpfe kann ausschließlich die VLX-Runtime laden.
4. Starten
./run.sh [Anwendungsargumente...]
Windows:
run.bat [Anwendungsargumente...]
Ersetzen Sie das Verzeichnis vlxjre in der Ausgabe nicht durch eine System-JRE. Wenn Sie die Anwendung von Hand starten müssen, nehmen Sie das erzeugte Skript als Vorlage und behalten Sie Klassenpfad, VM-Optionen und JavaFX-Moduloptionen bei.
Für Windows-Ziele lässt sich zusätzlich ein nativer Starter erzeugen, der per Doppelklick läuft. Er besteht neben den Startskripten — siehe Windows-EXE-Starter erzeugen.
JVM-Startoptionen
Tragen Sie beim Paketieren in der GUI unter JVM-Startoptionen eine Option pro Zeile ein oder wiederholen Sie den Schalter auf der Kommandozeile:
--jvm-option -Xms512m --jvm-option -Xmx2g
Dauerhafte Änderung in einem bereits ausgelieferten Verzeichnis:
- macOS und Linux: Bearbeiten Sie
run.shund fügen Sie vor der Prüfung aufAPP_JAVA_OPTSdie ZeileJVM_OPTS+=("-Xms512m" "-Xmx2g")ein.run.commandruft dasselberun.shauf. - Windows: Bearbeiten Sie
run.batund fügen Sie vor der Prüfung aufAPP_JAVA_OPTSdie Zeileset "JVM_OPTS=%JVM_OPTS% -Xms512m -Xmx2g"ein.
Einmalige Optionen lassen sich über APP_JAVA_OPTS einschleusen. Vollständige Beispiele und Hinweise stehen unter JVM-Startoptionen. Von Hand geänderte Skripte werden beim erneuten Paketieren überschrieben.
5. Empfohlener Schutzumfang
Standardmäßig werden die eigenen Klassen der Anwendung geschützt. Für Produktivprojekte ist es besser, die eigenen Geschäftspakete ausdrücklich zu benennen:
--protect 'com.mycompany.product.**'
Klassen, die Sie normalerweise ausschließen sollten:
- DTOs und Records, die Jackson direkt serialisiert oder deserialisiert;
- Klassen, auf deren Felder oder Methoden über JNI zugegriffen wird;
- Klassen, die ein ORM, ein DI-Container oder ein Proxy-Framework umschreiben muss;
- Bibliotheken von Dritten und Open-Source-Frameworks;
- Klassen, die ein eigener ClassLoader aus einem Byte-Array neu definieren muss.
6. Die Suffixe .p4jx und .jar
p4j javaapp app.jar dist --archive-suffix jar
Diese Option ändert nur den Dateinamen; der Archivinhalt bleibt P4JX. Verwenden Sie sie nur, wenn eine Komponente eines Drittanbieters .jar in einer URL oder einem Dateinamen fest verdrahtet hat. Aus dem Archiv wird dadurch kein gewöhnliches ZIP oder JAR.