Schutz für gewöhnliche Java-Anwendungen
javaapp wird für gewöhnliche Java-Anwendungen mit Hauptklasse verwendet. Es erzeugt einen geschützten Archiv, das VLX JRE für die Zielplattform sowie Startskripte.
1. GUI-Bearbeitung
-
Wählen Sie auf der Anwendungsart-Seite Java Application aus.

-
Wählen Sie das Eingabes Jar, Die mitgelieferte Java-Version und die Zielplattform aus und entscheiden Sie sich zwischen Einfachmodus oder Fortgeschrittenem Modus.

-
Im Fortgeschrittenen Modus füllen Sie Main class nach Bedarf aus und konfigurieren Sie JVM-Parameter, JavaFX sowie Ausschlussregeln; im Einfachmodus kann diese Seite übersprungen werden. Die Bedeutung der einzelnen Optionen finden Sie in Einstellungen für den Fortgeschrittenen-Modus von Protector4J.

-
Wählen Sie den Ausgabekatalog aus, überprüfen Sie den Parameterzusammenfassung und klicken Sie anschließend auf Run protection.

2. CLI-Beispiele
Wenn das Manifest bereits den richtigen Main-Class enthält:
p4j javaapp app.jar dist
Wenn das Manifest keinen Main-Class enthält oder ein anderer Startklasse verwendet werden muss, wird dies über --main angegeben:
p4j javaapp app.jar dist --main com.example.Main
Gleichzeitige Angabe von Startklasse und JVM-Parametern:
p4j javaapp app.jar dist \
--main com.example.Main \
--jvm-option -Xms512m \
--jvm-option -Xmx2g
Selektiver Schutz:
p4j javaapp app.jar dist \
--protect 'com.example.core.**' \
--exclude 'com.example.core.dto.**'
Kompatibilitätsprüfung sowie automatische Anwendungsempfehlungen:
p4j javaapp app.jar --compat-scan
p4j javaapp app.jar dist --compat-apply
Diese beiden Optionen können nicht gleichzeitig verwendet werden; der Unterschied zwischen ihnen ist:
| Optionen | Verhalten | Wann es verwendet wird |
|---|---|---|
--compat-scan | Scannt nur die Eingabesdatei JAR, gibt Risiken und Konfigurationsempfehlungen aus und beendet sich anschließend; es kodiert nicht und erzeugt auch keine dist, weshalb kein Ausgabeverzeichnis erforderlich ist. | Wird verwendet, um nach dem ersten Schutz einer Anwendung, bei der Aktualisierung von Abhängigkeiten oder Anpassungen des Schutzumfangs sowie zur Behebung von Kompatibilitätsproblemen zunächst einen Bericht anzuzeigen. |
--compat-apply | Fügt nach dem Scannen automatisch konservative Empfehlungen hinzu, setzt anschließend die Kodierung fort und erzeugt die Ausgabe, weshalb unbedingt ein Ausgabeverzeichnis angegeben werden muss. | Wird verwendet, um das Paketieren abzuschließen, nachdem die Scanergebnisse geprüft und die automatischen Empfehlungen angenommen wurden; es kann auch bei wiederholten Builds mit bereits überprüften Regeln oder in CI-Prozessen eingesetzt werden. |
Für javaapp und --compat-apply können auf Basis der Scanergebnisse zusätzliche Ausnahmeklassen hinzugefügt sowie Optionen wie ZIP overlay, JavaFX und Archivendung angepasst werden. Bei den letzten drei Optionen haben die explizit in der Befehlszeile angegebenen Werte Vorrang; die empfohlenen Ausnahmeklassen werden standardmäßig mit den explizit angegebenen --exclude-Werten zusammengeführt. Falls keine automatische Hinzufügung von Ausnahmeklassen gewünscht ist, kann gleichzeitig --no-compat-excludes übergeben werden. Der Scanner führt nur eine statische heuristische Analyse durch; Probleme, die eine Codeänderung erfordern, werden nicht automatisch von --compat-apply behoben, und es müssen nach der Erstellung erneut Regressionstests auf der Zielplattform durchgeführt werden.
Weitere CLI-Befehle, alle Optionen, Umgebungsvariablen und Automatisierungsbeispiele finden Sie in Referenz für CLI-Parameter.
3. Ausgabestruktur
dist/
├── app.p4jx # oder --archive-suffix jar erzeugen app.jar
├── vlxjre/ # Laufzeitumgebung, die mit der Archivierungs- und Zielplattform übereinstimmt
├── lib/ # Abhängigkeiten von Manifest Class-Path, optional
├── run.sh
├── run.command
├── run.bat
└── README.md
Nicht-klassbasierte Ressourcen werden im öffentlichen Ressourcenansichtsfenster von P4JX gespeichert. Geschützte klassbasierte Ressourcen zeigen dem Scanner nur Metadaten-Informationen; die eigentlichen Methodeninhalte können nur von der VLX-Laufzeitumgebung geladen werden.
4. Starten
./run.sh [Anwendungsparameter...]
Windows:
run.bat [Anwendungsparameter...]
Ersetzen Sie den vlxjre im Ausgabeverzeichnis nicht durch das System-JRE. Falls ein manueller Start notwendig ist, behalten Sie bitte Klassenpfad, VM-Parameter sowie JavaFX-Modulparameter unter Verwendung des generierten Skripts bei.
JVM-Startparameter
Beim Paketieren kann man in der GUI unter JVM startup options einen Parameter pro Zeile eingeben oder in der CLI wieder verwenden:
--jvm-option -Xms512m --jvm-option -Xmx2g
Dauerhafte Änderungen im aktuellen Verzeichnis nach der Bereitstellung:
- macOS/Linux: Bearbeiten Sie
run.shund fügen Sie vor der Prüfung inAPP_JAVA_OPTSJVM_OPTS+=("-Xms512m" "-Xmx2g")ein;run.commandruft dann dieselbe Dateirun.shauf. - Windows: Bearbeiten Sie
run.batund fügen Sie vor der Prüfung inAPP_JAVA_OPTSset "JVM_OPTS=%JVM_OPTS% -Xms512m -Xmx2g"ein.
Temporäre Parameter können über APP_JAVA_OPTS eingefügt werden. Vollständige Beispiele und Hinweise finden Sie unter Konfiguration der JVM-Startparameter. Manuelle Anpassungen an Skripten werden bei der erneuten Paketierung überschrieben.
5. Empfohlener Schutzumfang
Standardklasse für den Schutz der Anwendung. Für Produktprojekte wird dringend empfohlen, eigene Business-Pakete explizit zu definieren:
--protect 'com.mycompany.product.**'
In der Regel sollten folgende Elemente ausgeschlossen werden:
- DTOs und Records, die direkt von Jackson serialisiert/serialisiert werden;
- Klassen, deren Felder oder Methoden über JNI aufgerufen werden;
- Klassen, die in ORM-, Dependency-Injection- oder Proxy-Frameworks angepasst werden müssen;
- Drittanbieter-Bibliotheken und Open-Source-Frameworks;
- Klassen, die von einem benutzerdefinierten ClassLoader aus einem Byte-Array neu definiert werden müssen.
6. Suffixe .p4jx und .jar
p4j javaapp app.jar dist --archive-suffix jar
Diese Option ändert lediglich den Dateinamen, der Inhalt der Archivdatei bleibt weiterhin P4JX. Sie sollte nur verwendet werden, wenn Drittanbieter-Komponenten den URL oder Dateinamen hardcodiert mit .jar versehen haben; dadurch wird die Archivdatei nicht zu einem gewöhnlichen ZIP/JAR.