Загрузка файла относительно исполняемого файла JAR

Вопрос говорит сам за себя.

В моем случае особенность заключается в том, что текущим рабочим каталогом является не местоположение файла 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
  • Я не хочу передавать путь файла как параметр для вызова 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>
13
задан f1sh 3 September 2010 в 09:40
поделиться