Запуск Java-класса, который находится на подключенном сетевом диске - PullRequest
0 голосов
/ 24 июня 2011

Я пытаюсь выяснить, возможно ли запустить класс Java, который находится на подключенном сетевом диске.Примером может быть:

C:\temp\groovy>java p:\Test
Exception in thread "main" java.lang.NoClassDefFoundError: p:\Test
Caused by: java.lang.ClassNotFoundException: p:\Test
        at java.net.URLClassLoader$1.run(URLClassLoader.java:202)
        at java.security.AccessController.doPrivileged(Native Method)
        at java.net.URLClassLoader.findClass(URLClassLoader.java:190)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:306)
        at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:247)
Could not find the main class: p:\Test.  Program will exit.

Прежде чем попробовать это, я хотел посмотреть, могу ли я запустить файл класса java, который находится на общем ресурсе UNC (java \\somehost\share\Test).Это тоже не сработало - та же ошибка, что и определение класса не найдено.

Я что-то не так делаю или это действительно не поддерживается?

Спасибо

Ответы [ 2 ]

3 голосов
/ 24 июня 2011

Когда вы указываете путь как часть имени класса, Java ожидает, что он находится в пакете, соответствующем иерархии папок, в которой он находится.

Пример:

> java z:/Test
java.lang.NoClassDefFoundError: z:/Test
Caused by: java.lang.ClassNotFoundException: z:.Test

Вот оноищет "z: .Test" как полное имя класса.

Предполагая, что ваш тестовый класс не объявлен как находящийся в каком-либо пакете, вам нужно указать каталог в classpath:

java -cp Z:\path Test
1 голос
/ 24 июня 2011

Средство запуска Java принимает класс в качестве первого неопционального аргумента для поиска основного метода, который должен быть вызван.

Из документации :

По умолчанию первый неопциональный аргумент - это имя класса, который будет вызван.Следует использовать полное имя класса.Если указана опция -jar, первый аргумент без опции - это имя архива JAR, содержащего файлы классов и ресурсов для приложения, с классом запуска, указанным в заголовке манифеста Main-Class.

Среда выполнения Java выполняет поиск класса запуска и других используемых классов в трех наборах расположений: путь к классу начальной загрузки, установленные расширения и путь к классу пользователя.

Таким образом, вы не можете предоставить p:\Test в качестве аргумента.Вместо этого измените текущий рабочий каталог на p:\ и выполните java Test.

. Вы можете использовать пакетный скрипт, чтобы изменить каталог без выполнения этого вручную.Или вы можете упаковать класс в файл JAR (с требуемым манифестом) и предоставить опцию -jar, чтобы указать абсолютный путь к файлу JAR к исполняемому файлу java;это предпочтительно, если вы не хотите управлять слишком большим количеством файлов классов.

Редактировать: вы также можете использовать флаг -cp, как указано @Dave Costa.Это позволит вам избавиться от необходимости менять текущий каталог.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...