2

У меня есть Java-программа, которую мне нужно запустить с помощью команды, подобной этой:

java -cp "some.jar;some2.jar" -Dsome.prop.dir=C:\somedir com.software.MainClass

Теперь проблема здесь в параметре -Dsome.prop.dir=C:\somedir - по какой-то причине это приводит к сбою Java с Could not find or load main class com.software.MainClass . Если я пропущу этот один параметр, программа запустится нормально, но, очевидно, poperty не установлен.

Я предполагаю, что это может быть потому что dir - зарезервированное слово в Windows. Есть ли способ, возможно, замаскировать это или обойти это, кроме изменения приложения Java или создания какого-либо специального бинарного /PE-средства запуска для приложения Java в Windows?

1 ответ1

0

У меня нет решения, но некоторые тесты и рекомендации, чтобы исследовать вашу проблему.

Я попытался воспроизвести проблему, которую вы описываете. Я даже создал поддельные имена (каталог 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

Результаты: не указан параметр каталога
Главное работает нормально.

Хотя я смог запустить проблему без проблем, я видел несколько мест, где проблема могла существовать:

  1. Фляги. Вы указываете classpath для этих первых двух имен файлов. Основной класс должен быть в одном из них, иначе он не будет найден. Я подозреваю, что это не проблема, так как он работает правильно без параметра -D.
  2. Параметр -D используется внутри, чтобы найти класс. В приведенном выше примере кода я просто сообщаю о каталоге. Возможно, вы используете его для поиска файла класса, и он не может его найти? Возможно, программа использует каталог для поиска класса, но когда вы опускаете каталог, по умолчанию используется каталог, указанный в jar-файле?

Если я работал в каталоге bin (где генерировались классы), я мог опустить команду -cp, и она работала правильно.

Если я использовал -cp с банкой без Mainclass, я получил ошибку, но я понял, была ли указана опция -D.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .