Ich habe keine Lösung, aber einige Tests und Empfehlungen, um Ihr Problem zu untersuchen.
Ich habe versucht, das von Ihnen beschriebene Problem zu reproduzieren. Ich habe sogar die falschen Namen erstellt (Verzeichnis somedir, class Mainclass).
Hier ist meine Version von Mainclass. Im Wesentlichen erhält es die Systemeigenschaft und generiert daraus einfache Diagnoseausgaben.
package com.software; import java.io.File; public class Mainclass { public static void main(String[] args) { String someDir = System.getProperty("some.prop.dir"); if (someDir == null || someDir.isEmpty()) { System.out.println("No directory parameter specified"); } else { File dir = new File(someDir); System.out.println(String.format("Directory stats: %s, %s, %s", someDir, dir.getAbsolutePath(), dir.isDirectory() ? "directory" : "file")); } System.out.println("Main running okay."); } }
Als Nächstes erstellte ich eine JAR-Datei mit Mainclass und nannte sie some.jar.
Ich habe die Befehlszeile wie folgt ausgeführt:
java -cp "some.jar" -Dsome.prop.dir=C:\somedir com.software.Mainclass
Ergebnisse:
Verzeichnisstatistiken: C: \ somedir, C: \ somedir, Verzeichnis
Main läuft einwandfrei.
Ich lief auch ohne den Parameter -D:
java -cp "some.jar" com.software.Mainclass
Ergebnisse: Kein Verzeichnisparameter angegeben
.
Obwohl ich das Problem ohne Probleme ausführen konnte, habe ich einige Stellen gesehen, an denen das Problem bestehen könnte:
- Die Jar-Dateien. Sie geben den Klassenpfad als die ersten beiden Dateinamen an. Hauptklasse muss in einer von ihnen sein, sonst wird sie nicht gefunden. Ich vermute, das ist nicht das Problem, da es ohne den Parameter -D korrekt läuft.
- Der Parameter -D wird intern zum Suchen der Klasse verwendet. Im obigen Beispielcode berichte ich nur über das Verzeichnis. Vielleicht verwenden Sie es, um die Klassendatei irgendwie zu finden, und sie kann sie nicht finden? Vielleicht verwendet das Programm das Verzeichnis, um nach der Klasse zu suchen, aber wenn Sie das Verzeichnis weglassen, verwendet es standardmäßig das in der JAR-Datei angegebene Verzeichnis.
Wenn ich im bin-Verzeichnis (wo die Klassen generiert wurden) lief, konnte ich den Befehl -cp weglassen und es lief korrekt.
Wenn ich -cp mit einem jar ohne Mainclass verwendet habe, bekam ich den Fehler, aber ich bekam es, ob -D angegeben wurde oder nicht.