Cargando un archivo relativo al archivo jar en ejecución

La pregunta lo dice todo.

La especialidad en mi caso es que el directorio de trabajo actual no es la ubicación del archivo jar sinoc:\Windows\system32 (Windows inicia mi archivo jar usando el botón derecho del menú, quiero pasar la ruta de una carpeta como parámetro al jar).

Ahora quiero cargar un archivo de configuración llamadoconfig.xml que está en la misma carpeta que el jar. El propósito del archivo es, por supuesto, proporcionar configuraciones para el jar. Es importante para mí que el archivo xml seafuera de del archivo jar para una fácil edición.

Me está costando cargar ese archivo. Windows ejecuta la línea

cmd /k java -jar D:\pathToJarfile\unpacker-0.0.1-SNAPSHOT-jar-with-dependencies.jar

Llamando a todo concmd /k deja abierto el símbolo del sistema de Windows para que pueda ver la salida del jar.

No puedo usarnew File(".") oSystem.getProperty("user.dir") para la ruta relativa a medida que estas funciones regresanC:\Windows\system32\. yC:\Windows\system32, respectivamente (que es la carpeta de trabajo para todo lo que Windows ejecuta AFAIK).

No he tenido éxito conLauncher.class.getResourceAsStream("/../config.xml") ya sea. Dado que ese camino comienza con/, la búsqueda comienza en el nodo raíz del jar. Caminante a../config.xml apunta exactamente a ese archivo, pero la llamada vuelvenull.

¿Alguien me puede apuntar en la dirección correcta? Estoy realmente atrapado aquí. Este archivo cargando cosas realmente me molesta cada vez ...

Requisitos por mí mismo:

No quiero codificar la ruta en el código fuente de JavaNo quiero pasar la ruta del archivo como parámetro aljava -jar llamada (ni como un parámetro para elmain(String[] args) ni usar-Dpath=d:\... para establecer una propiedad del sistema)

Además del problema original, me costó mucho tener el lugar maven2Class-Path: . en elMANIFEST.MF (La solución que BalusC publicó) al usarjar-with-dependencies. El problema era que la línea aparecía en el archivo MANIFEST del jar regular, pero no en el archivo MANIFEST del jar-with-dependencies.jar (se generan 2 archivos jar). Para cualquiera a quien le importe cómo lo hice:

<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>

Respuestas a la pregunta(2)

Su respuesta a la pregunta