Wie behandeln Pfad zur Ressource in das maven-Projekt verpackt jar

Ich habe ein problem mit der Ressourcen-Verwaltung im Maven-Projekt gepackt in jar-Datei (auf der Plattform Windows + Eclipse-IDE). Ich weiß nicht, wie zu behandeln Pfad zur Ressource.

Meine Ressourcen sind in /src/main/resources/- Ordner.

Meine pom.xml:

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>

  <groupId>example.com</groupId>
  <artifactId>uploader</artifactId>
  <version>0.0.1-SNAPSHOT</version>
  <packaging>jar</packaging>

  <name>uploader</name>
  <url>http://maven.apache.org</url>

  <properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
  </properties>

  <dependencies>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>3.8.1</version>
      <scope>test</scope>
    </dependency>
  </dependencies>

  <build>
      <resources>
          <resource>
              <directory>src/main/resources</directory>
              <includes>
                  <include>clientconfig.xml</include>
                  <include>pause.png</include>
                  <include>resume.png</include>
                  <include>serverconfig.xml</include>
                  <include>stop.png</include>
              </includes>
              <!-- relative to target/classes
                   i.e. ${project.build.outputDirectory} -->
              <targetPath>..</targetPath>
          </resource>
      </resources>
  </build>

</project>

Beispiel code-Generierung problem:

private static void readConfiguration() {
    try {
        String path = ClassLoader.getSystemResource("clientconfig.xml").toString();
        config = new UploaderConfig(path);
    } catch (ConfigException e) {
        e.printStackTrace();
    }
}

//...

public UploaderConfig(String path) throws ConfigException {
    File xmlFile = new File(path);
//...

Als ich nach export-Dateien werden korrekt gespeichert in die Wurzel-jar-Datei-Archiv, aber wenn ich versuche zu aufrufen Programm von der Konsole bekomme ich:

java.io.FileNotFoundException: C:\Users\lenovo\Desktop\jar:file:\C:\Users\lenovo
\Desktop\uploader.jar!\clientconfig.xml (Nazwa pliku, nazwa katalogu lub skadni
a etykiety woluminu jest niepoprawna)
        at java.io.FileInputStream.open(Native Method)
        at java.io.FileInputStream.<init>(Unknown Source)
        at java.io.FileInputStream.<init>(Unknown Source)
        at sun.net.www.protocol.file.FileURLConnection.connect(Unknown Source)
        at sun.net.www.protocol.file.FileURLConnection.getInputStream(Unknown So
urce)
        at com.sun.org.apache.xerces.internal.impl.XMLEntityManager.setupCurrent
Entity(Unknown Source)
        at com.sun.org.apache.xerces.internal.impl.XMLVersionDetector.determineD
ocVersion(Unknown Source)
        at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(U
nknown Source)
        at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(U
nknown Source)
        at com.sun.org.apache.xerces.internal.parsers.XMLParser.parse(Unknown So
urce)
        at com.sun.org.apache.xerces.internal.parsers.DOMParser.parse(Unknown So
urce)
        at com.sun.org.apache.xerces.internal.jaxp.DocumentBuilderImpl.parse(Unk
nown Source)
        at javax.xml.parsers.DocumentBuilder.parse(Unknown Source)
        at example.com.uploader.config.UploaderConfig.<init>(UploaderConfig.j
ava:110)
        at example.com.uploader.client.Client.readConfiguration(Client.java:2
00)
        at example.com.uploader.client.Client.main(Client.java:222)
example.com.uploader.config.ConfigException
        at example.com.uploader.config.UploaderConfig.<init>(UploaderConfig.j
ava:119)
        at example.comt.uploader.client.Client.readConfiguration(Client.java:2
00)
        at example.com.uploader.client.Client.main(Client.java:222)

(Vität über polnische Kommentare und Zeilenumbrüche, aber ich kompilieren, Polnisch-Sprache-system)

Es ist nicht nur die Frage zu diesem speziellen Fall, sondern stoßen wie propertly und korrekt lagern und handhaben von Ressourcen-Dateien im maven-Projekt gepackt, um die jar-Datei.

  • statt "clientconfig.xml" versuchen "/clientconfig.xml"
  • funktioniert nicht. getSystemSource gibt null zurück, was bedeutet, dass java nicht finden können, die Datei. Schauen Sie, das Betriebssystem ist "Windows", also Pfad-Trennzeichen '\\'.
  • Pfad-Trennzeichen / portable - funktioniert für alle Betriebssysteme. Versuchen YourClass.Klasse.getResource("/clientconfig.xml")
  • Immer noch die gleiche Fehlermeldung. Ich überprüfte Archiv für die Datei clientconfig.xml um sicher zu sein, dass die Datei im root-Ordner. java.io.FileNotFoundException: C:\Users\lenovo\Desktop\jar:file:\C:\Users\lenovo \Desktop\uploader.jar!\clientconfig.xml
InformationsquelleAutor Piotr Zych | 2013-04-27
Schreibe einen Kommentar