Meine GWT-Anwendung ist derzeit in einem Krieg mit Maven verpackt, die dann auf Tomcat eingesetzt wird. Ich würde gerne in ein Jar umpacken, damit es mit java -jar ausgeführt werden kann, und die Anwendung von einem eingebetteten Webserver wie Jetty aus bedienen lassen. Ähnlich wie bei der Ausführung im Dev-Modus, aber ich möchte, dass es aus einem einfach zu installierenden Fat/Uber-Jar mit HTML- und GWT-JS-Dateien passiert. Ich konnte nur Anweisungen finden, dies für Jetty mit Frühling zu tun, und war nicht in der Lage, dies für GWT anzupassen. Etwas wie Jetty's example uber jar project ist in der Nähe, muss nur mit GWT auch arbeiten.Wie verpacken Sie eine GWT-Anwendung in einem fetten JAR mit Maven?
Antwort
Sie können einfach die Verpackung Ihres Maven Projekt ändern:
<project>
...
<packaging>jar</packaging>
...
</project>
Bitte beachten Sie, dass Sie couldnt deploy a jar file in tomcat.
Als nächstes würde ich sicherstellen, dass die Abhängigkeit gwt-dev
Bereich zur Verfügung gestellt hat (da diese Abhängigkeit bereits eine alte Version von Anlegesteg enthält). Danach können Sie die Trikot-Abhängigkeit hinzufügen und einen eingebetteten Server starten, der Ihre GWT-Applikation bedient (zB see here).
<project>
<modelVersion>4.0.0</modelVersion>
<groupId>com.mycompany.project</groupId>
<artifactId>core</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>jar</packaging>
</project>
Danke für die Beantwortung, aber das schließt nicht alles ein, was ich gefragt habe, dh GWT kompilierte js-Dateien im Jar, eingebetteten Webserver etc. –
Die Kombination der example Jetty project und @ mam10eks Antwort, ich glaube, ich habe es geschafft, es trotzdem für eine einfache GWT app, um herauszufinden:
pom.xml:
<?xml version="1.0" encoding="UTF-8"?>
<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/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.example.HelloJettyGwt</groupId>
<artifactId>HelloJettyGwt</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>HelloJettyGwt</name>
<properties>
<gwtVersion>2.7.0</gwtVersion>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<jetty-version>9.3.2.v20150730</jetty-version>
</properties>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>com.google.gwt</groupId>
<artifactId>gwt</artifactId>
<version>${gwtVersion}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<dependencies>
<dependency>
<groupId>com.google.gwt</groupId>
<artifactId>gwt-servlet</artifactId>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>com.google.gwt</groupId>
<artifactId>gwt-user</artifactId>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>com.google.gwt</groupId>
<artifactId>gwt-dev</artifactId>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>3.1.0</version>
</dependency>
<dependency>
<groupId>org.eclipse.jetty</groupId>
<artifactId>jetty-servlet</artifactId>
<version>${jetty-version}</version>
</dependency>
<dependency>
<groupId>org.eclipse.jetty.websocket</groupId>
<artifactId>javax-websocket-server-impl</artifactId>
<version>${jetty-version}</version>
</dependency>
</dependencies>
<build>
<resources>
<resource>
<directory>src/main/resources</directory>
<filtering>true</filtering>
</resource>
</resources>
<outputDirectory>${project.build.directory}/${project.build.finalName}/WEB-INF/classes</outputDirectory>
<plugins>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>gwt-maven-plugin</artifactId>
<version>2.7.0</version>
<executions>
<execution>
<goals>
<goal>compile</goal>
<goal>test</goal>
<goal>generateAsync</goal>
</goals>
</execution>
</executions>
<configuration>
<runTarget>app.html</runTarget>
<modules>
<module>com.example.HelloJettyGwt.app</module>
</modules>
</configuration>
</plugin>
<plugin>
<artifactId>maven-resources-plugin</artifactId>
<version>2.5</version>
<executions>
<execution>
<id>copy-resources</id>
<phase>prepare-package</phase>
<goals>
<goal>copy-resources</goal>
</goals>
<configuration>
<outputDirectory>${project.build.outputDirectory}</outputDirectory>
<resources>
<resource>
<directory>
src/main/webapp
</directory>
<filtering>true</filtering>
<includes>
<include>**/*.html</include>
<include>**/*.css</include>
<include>**/web.xml</include>
</includes>
</resource>
<resource>
<directory>
${project.build.directory}/${project.build.finalName}/
</directory>
<filtering>true</filtering>
<includes>
<include>**/app/**</include>
</includes>
</resource>
</resources>
</configuration>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>2.3.2</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<version>2.5</version>
<configuration>
<archive>
<manifest>
<mainClass>com.example.HelloJettyGwt.ServerMain</mainClass>
</manifest>
<manifestEntries>
<Implementation-Version>${jetty-version}</Implementation-Version>
</manifestEntries>
</archive>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-shade-plugin</artifactId>
<version>2.4.3</version>
<executions>
<execution>
<id>rebuild-war</id>
<phase>package</phase>
<goals>
<goal>shade</goal>
</goals>
<configuration>
<createDependencyReducedPom>false</createDependencyReducedPom>
<artifactSet>
<includes>
<include>*:*</include>
</includes>
</artifactSet>
<filters>
<filter>
<artifact>*:*</artifact>
<excludes>
<exclude>META-INF/VERSION.txt</exclude>
<exclude>META-INF/LICENSE.txt</exclude>
</excludes>
</filter>
<!-- exclude the MANIFEST.MF entries that will cause problems -->
<filter>
<artifact>javax.annotation:*</artifact>
<excludes>
<exclude>META-INF/MANIFEST.MF</exclude>
</excludes>
</filter>
<filter>
<artifact>javax.servlet:*</artifact>
<excludes>
<exclude>META-INF/MANIFEST.MF</exclude>
</excludes>
</filter>
<filter>
<artifact>javax.websocket:*</artifact>
<excludes>
<exclude>META-INF/MANIFEST.MF</exclude>
</excludes>
</filter>
<filter>
<artifact>org.eclipse.jetty:*</artifact>
<excludes>
<exclude>META-INF/MANIFEST.MF</exclude>
</excludes>
</filter>
<filter>
<artifact>org.eclipse.jetty.websocket:*</artifact>
<excludes>
<exclude>META-INF/MANIFEST.MF</exclude>
</excludes>
</filter>
<filter>
<artifact>org.ow2.asm:*</artifact>
<excludes>
<exclude>META-INF/MANIFEST.MF</exclude>
</excludes>
</filter>
</filters>
<transformers>
<transformer
implementation="org.apache.maven.plugins.shade.resource.ServicesResourceTransformer" />
</transformers>
</configuration>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-enforcer-plugin</artifactId>
<version>1.1.1</version>
<executions>
<execution>
<id>enforce-java</id>
<goals>
<goal>enforce</goal>
</goals>
<configuration>
<rules>
<requireMavenVersion>
<version>[3.0.0,)</version>
</requireMavenVersion>
<requireJavaVersion>
<version>[1.8,)</version>
<message>[ERROR] OLD JDK [${java.version}] in use.
Jetty
${jetty-version} requires JDK 1.8 or newer</message>
</requireJavaVersion>
</rules>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
Hauptmethode:
Nur gefunden, dass, während dies mit mvn Paket && java -jar funktioniert ... es funktioniert nicht mit super dev mode über mvn gwt: run –
Danke Ich habe versucht den Link und es hat mir geholfen, näher zu kommen, aber ich habe immer noch nicht in der Lage, alles mit Maven arbeiten, und ich bin nach einer Lösung, wo ich ein Fett bekommen kann jar ie alles, was benötigt wird, um die Webapp innerhalb des jar einschließlich html, GWT js-Dateien usw. ohne eine separate WAR-Datei laufen zu lassen. –