Вопрос говорит сам за себя.
В моем случае особенность заключается в том, что текущим рабочим каталогом является не местоположение файла JAR, а c: \ Windows \ system32
(Мой файл JAR запускается окнами с помощью меню, вызываемого правой кнопкой мыши). , я хочу передать путь к папке в качестве параметра к банке).
Теперь я хочу загрузить файл конфигурации с именем config.xml
, который находится в той же папке, что и jar. файл, конечно, должен предоставить настройки для фляги. Для меня важно, чтобы xml-файл находился за пределами файла jar для удобного редактирования.
У меня проблемы с загрузкой этого файла. Windows выполняет строку
cmd /k java -jar D:\pathToJarfile\unpacker-0.0.1-SNAPSHOT-jar-with-dependencies.jar
Вызов всего этого с помощью cmd / k
оставляет командную строку Windows открытой, чтобы я мог видеть вывод файла jar.
Я не могу использовать new File (". ")
или System.getProperty (" user.dir ")
для относительного пути, так как эти функции возвращают C: \ Windows \ system32 \.
и C: \ Windows \ system32
соответственно (это рабочая папка для всего, что windows выполняет AFAIK).
У меня не было успеха с Launcher.class.getResourceAsStream ("/ ../config.xml")
либо. Поскольку этот путь начинается с /
, поиск начинается с корневого узла банки. Переход к ../ config.xml
точно указывает на этот файл, но вызов возвращает null
.
Может ли кто-нибудь указать мне правильное направление? Я действительно застрял здесь. Этот материал, загружающий файлы, действительно каждый раз меня раздражает ...
Требования сам:
java -jar
(ни в качестве параметра для main (String [] args)
, ни с использованием -Dpath = d: \ ...
установить системное свойство) В дополнение к исходной задаче мне было трудно найти maven2 место Class-Path:.
в MANIFEST.
Проблема заключалась в том, что строка появилась в файле MANIFEST обычного jar, а не в файле MANIFEST jar-with-dependencies.jar (создается 2 файла jar).
Для тех, кому все равно, как я это сделал:
<plugin>
<artifactId>maven-assembly-plugin</artifactId>
<version>2.2-beta-5</version>
<configuration>
<archive>
<manifest>
<mainClass>${mainClass}</mainClass>
<addClasspath>true</addClasspath>
<!--at first, i tried to place the Class-Path entry
right here using <manifestEntries>. see below -->
</manifest>
</archive>
<descriptorRefs>
<descriptorRef>jar-with-dependencies</descriptorRef>
</descriptorRefs>
</configuration>
<executions>
<execution>
<goals>
<goal>attached</goal>
</goals>
<phase>package</phase>
<configuration>
<descriptorRefs>
<descriptorRef>jar-with-dependencies</descriptorRef>
</descriptorRefs>
<archive>
<manifest>
<mainClass>${mainClass}</mainClass>
</manifest>
<!--this is the correct placement -->
<manifestEntries>
<Class-Path>.</Class-Path>
</manifestEntries>
</archive>
</configuration>
</execution>
</executions>
</plugin>