У меня нет решения, но некоторые тесты и рекомендации, чтобы исследовать вашу проблему.
Я попытался воспроизвести проблему, которую вы описываете. Я даже создал поддельные имена (каталог somedir, класс Mainclass).
Вот моя версия Mainclass. По сути, он получает системное свойство и использует его для генерации простого диагностического вывода.
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.");
}
}
Затем я создал файл jar, содержащий Mainclass, и назвал его some.jar.
Я запустил командную строку следующим образом:
java -cp "some.jar" -Dsome.prop.dir=C:\somedir com.software.Mainclass
Результаты:
Статистика каталогов: C:\somedir, C:\somedir, каталог
Главное работает нормально.
Я также бежал без параметра -D:
java -cp "some.jar" com.software.Mainclass
Результаты: не указан параметр каталога
Главное работает нормально.
Хотя я смог запустить проблему без проблем, я видел несколько мест, где проблема могла существовать:
- Фляги. Вы указываете classpath для этих первых двух имен файлов. Основной класс должен быть в одном из них, иначе он не будет найден. Я подозреваю, что это не проблема, так как он работает правильно без параметра -D.
- Параметр -D используется внутри, чтобы найти класс. В приведенном выше примере кода я просто сообщаю о каталоге. Возможно, вы используете его для поиска файла класса, и он не может его найти? Возможно, программа использует каталог для поиска класса, но когда вы опускаете каталог, по умолчанию используется каталог, указанный в jar-файле?
Если я работал в каталоге bin (где генерировались классы), я мог опустить команду -cp, и она работала правильно.
Если я использовал -cp с банкой без Mainclass, я получил ошибку, но я понял, была ли указана опция -D.