Spring-Boot-Ressource Nicht Gefunden werden, wenn über ausführbare Jar

wieder habe ich das Gesicht ein seltsames Problem und hoffe hier jemand helfen kann.

Ich habe eine spring-boot-backend-Modul, was funktioniert in eclipse gut und die Anwendung ausführbar ist beim Start von main in application.java. Alles in Ordnung.

Meiner Anwendung macht das importieren von Beispiel-Daten in die Datenbank über csv-Dateien was enthalten ist in src/main/resources Ordner. Wie bereits erwähnt, beim starten in eclipse funktioniert alles.

Jetzt würde ich mag, um es auszuführen als ausführbare jar-Datei die Anwendung gestartet und dann konnte nicht gestartet werden, weil es nicht finden können die csv-Dateien. Der Weg was es gibt, in denen es aussah für die Dateien, die korrekt ist und die csv-Dateien in der jar enthalten.

Dem Pom des Moduls sieht wie folgt aus:

<project>
    <modelVersion>4.0.0</modelVersion>

    <parent>
        <groupId>at.company.bbsng</groupId>
        <artifactId>bbsng-import</artifactId>
        <version>0.1.0-SNAPSHOT</version>
    </parent>

    <artifactId>bbsng-import-backend</artifactId>
    <name>bbsng-import-backend</name>

    <properties>
        <start-class>at.company.bbsng.dataimport.Application</start-class>
    </properties>


    <dependencies>

        <!-- SPRING ... -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-batch</artifactId>
            <!-- EXCLUDE LOGBACK AND USE LOG4J -->
            <exclusions>
                <exclusion>
                    <artifactId>spring-boot-starter-logging</artifactId>
                    <groupId>org.springframework.boot</groupId>
                </exclusion>
            </exclusions>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-log4j</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>

        <!-- COMMONS ... -->

        ...

    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <executions>
                    <execution>
                        <goals>
                            <goal>repackage</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>

</project>

Pfad zur csv-Dateien konfiguriert, in Anwesen-Dateien wie folgt:

# EXAMPLE PATH
csv.path=config/csv/

Den Teil des java-config-Datei ist wie folgt:

  ...

  @Value("${csv.path}")
  private String csvExamplePath;

  @Bean
  public Resource addressResource() {
    return new ClassPathResource(csvExamplePath + CSV_ADDRESS);
  }

    ...

In der jar-Dateien befinden sich im Pfad

\config\csv\

Stacktrace:

Caused by: java.io.FileNotFoundException: class path resource [config/csv/Company.csv] cannot be resolved to absolute file path because it does not reside in th
e file system: jar:file:/C:/Development/Projekte/bbsng/trunk/import/backend/target/bbsng-import-backend-0.1.0-SNAPSHOT.jar!/config/csv/Company.csv
        at org.springframework.util.ResourceUtils.getFile(ResourceUtils.java:207)
        at org.springframework.core.io.AbstractFileResolvingResource.getFile(AbstractFileResolvingResource.java:52)
        at at.compax.bbsng.dataimport.app.source.company.CompanyGenerator.init(CompanyGenerator.java:28)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
        at java.lang.reflect.Method.invoke(Unknown Source)
        at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor$LifecycleElement.invoke(InitDestroyAnnotationBeanPostProcessor.java

Wieder, funktioniert die Anwendung wie erwartet beim starten von eclipse, nur die ausführbaren jar-beschwert sich über fehlenden csv-Dateien, welche im jar bereits.

Keine Ahnung, wäre toll.

InformationsquelleAutor Michael Hegner | 2014-10-03

Schreibe einen Kommentar