Erstellen Sie eine einzelne ausführbare JAR-Datei aus einem Spring-Basierte Java-Anwendung

Habe ich eine Feder-basierte Anwendung, die eine Komponente/Paket-scan suchen nach Paketen, in einem bestimmten Namensraum. Die Anwendung läuft einwandfrei in Eclipse, und ich möchte erstellen Sie eine einzelne ausführbare JAR-Datei bereitstellen, um unsere verschiedenen Umgebungen.

Habe ich versucht, verschiedene Möglichkeiten, um diese zu arbeiten, aber das einzige was funktioniert ist, wenn ich auch die Abhängigkeiten in einem Ordner außerhalb der JAR. Hier ist, was ich bisher ausprobiert habe -

  1. Maven Kompilieren zu einer einzigen jar - von hier , mit diesem Ansatz die einzelnen JAR erstellt, der die Abhängigkeiten der enthaltenen Klassen. Beim ausführen des JAR-mit -

    "java –jar jarName.jar"

    Erhalte ich eine Fehlermeldung - "Error: Configuration problem: Unable to locate Frühjahr NamespaceHandler für XML-schema-namespace http://www.springframework.org/schema/context]"

  2. Mit Exportieren Als Runnable JAR-file " von Eclipse, und wählen Sie "Extrahieren erforderlichen Bibliotheken in die erzeugte JAR' in der Bibliothek in der Handhabung".

    Diese baut auch ein jar mit den Abhängigkeiten der Klassen innerhalb es. Beim ausführen des jar, bekomme ich die gleiche Fehler "error: Configuration problem: Unable to locate Frühjahr NamespaceHandler für XML-schema-namespace [http://www.springframework.org/schema/context]"

  3. Mit Exportieren Als Runnable JAR-file " von Eclipse, und wählen Sie ' - Paket erforderlichen Bibliotheken in die erzeugte JAR' in der Bibliothek in der Handhabung".

    Dieser erstellt ein jar mit den Abhängigkeiten drin als Gläser, (keine Klassen). Wenn ich diese JAR-Datei erhalte ich folgende Fehler –

    “Nicht die Suche nach passenden Dateien unter URL [rsrc:com/Unternehmen/] weil es nicht dem entspricht, um ein Verzeichnis im Dateisystem java.io.FileNotFoundException: URL [rsrc:com/Unternehmen/] kann nicht aufgelöst werden, um die absolute Datei-Pfad, weil Sie nicht sind in der Datei system: rsrc:com/Unternehmen/bei org.springframework.util.ResourceUtils.getFile(ResourceUtils.java:210"

    Also das GLAS ran, wurde aber nicht zu tun, ein scan für die Komponenten, ich wurde gefragt, es zu finden.

  4. Mit Exportieren Als Runnable JAR-file " von Eclipse, und wählen Sie 'Kopieren benötigten Bibliotheken in einen sub-Ordner neben dem erzeugten JAR' in der Bibliothek in der Handhabung".

    Dies schafft eine kleines GLAS mit einem Ordner neben es enthält alle Abhängigkeiten, die als Gläser. Wenn ich diesen starte, funktioniert alles!

Also ich glaube nicht, dass es ein Problem mit meinem code, es scheint ein Problem zu sein mit Verpackung Feder, das macht ein Scannen in einer einzigen JAR. Wäre das korrekt?

Hat jemand einen Rat, wie man eine spring-basierte Anwendung, die dabei ein Paket/Komponente scan in einer einzigen ausführbaren JAR?

ANTWORT:

Habe ich den folgenden XML-Code, um meine POM-Datei und nur "mvn package", es erstellt eine einzelne ausführbare jar-Datei, die funktioniert. Warum es funktionierte ist immer noch ein Rätsel.

      <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-shade-plugin</artifactId>
            <version>2.3</version>
            <executions>
                <execution>
                    <phase>package</phase>
                    <goals>
                        <goal>shade</goal>
                    </goals>
                    <configuration>
                        <transformers>
                            <transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
                                <mainClass>com.company.project.MainApp</mainClass>
                            </transformer>
                            <transformer implementation="org.apache.maven.plugins.shade.resource.AppendingTransformer">
                                <resource>META-INF/spring.handlers</resource>
                            </transformer>
                            <transformer implementation="org.apache.maven.plugins.shade.resource.AppendingTransformer">
                                <resource>META-INF/spring.schemas</resource>
                            </transformer>
                        </transformers>
                    </configuration>
                </execution>
            </executions>
        </plugin>
  • Verwenden Sie einfach den Frühling Starten. Den Spring Initializr kann produzieren einem minimalen POM, zeigen Ihnen, was Sie brauchen.
InformationsquelleAutor P456678 | 2015-01-28
Schreibe einen Kommentar