В этом вопросе говорится все.
Специальность в моем случае состоит в том, что текущий рабочий каталог не является местоположением файла jar, но c:\Windows\system32
(Мой файл jar запускается окнами с помощью контекстного меню, я хочу передать путь к папке как параметр в банку).
Теперь я хочу загрузить файл конфигурации с именем config.xml
, который находится в той же папке, что и банка. Цель файла - это, конечно же, предоставить настройки для банки. Для меня важно, чтобы 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")
. Поскольку этот путь начинается с /
, поиск начинается с корня node банки. Переход к ../config.xml
указывает именно на этот файл, но вызов возвращает null
.
Может ли кто-нибудь указать мне в правильном направлении? Я действительно застрял здесь. Этот файл, загружающий материал, действительно менячет меня каждый раз...
Требования самостоятельно:
- Я не хочу жестко указывать путь в исходном коде java
- Я не хочу передавать путь к файлу в качестве параметра для вызова
java -jar
(ни в качестве параметра дляmain(String[] args)
, ни при использовании-Dpath=d:\...
для установки системного свойства)
В дополнение к исходной проблеме мне было трудно найти место maven2 Class-Path: .
в MANIFEST.MF
(решение, которое BalusC отправил) при использовании jar-with-dependencies
.
Проблема заключалась в том, что строка появилась в обычном файле MANIFEST, но не в файле jar-with-dependencies.jar MANIFEST (генерируется 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>