jgp
jgp

Reputation: 2091

Does anyone have a sample GWT 2.7.0 pom?

I am trying to use Maven with GWT 2.7.0. Does anyone have a small pom.xml template?

I am particularly looking at clean / install / running (I used gwt:run in a previous project)...

Upvotes: 8

Views: 7643

Answers (3)

haromt
haromt

Reputation: 81

Using the Archetype

Use it as you would any other Maven archetype to create a template/stub project.

 mvn archetype:generate \
   -DarchetypeGroupId=org.codehaus.mojo \
   -DarchetypeArtifactId=gwt-maven-plugin \
   -DarchetypeVersion=2.7.0

Docs: http://mojo.codehaus.org/gwt-maven-plugin/user-guide/archetype.html

Upvotes: 2

Thomas Broyer
Thomas Broyer

Reputation: 64541

What you need in your POM is:

  • GWT dependencies (gwt-user at a minimum, never deployed to the server; gwt-servlet for GWT-RPC or other server-side support, classes already included in gwt-user; gwt-dev and gwt-codeserver are recommended, it depends on the plugin you'll use though, never deploy them either)
  • gwt-maven-plugin; there are two of them: org.codehaus.mojo:gwt-maven-plugin (whose version must match the version GWT you're using), and net.ltgt.gwt.maven:gwt-maven-plugin (still in beta; works with any version of GWT)

Depending on the plugin, you'll use different packaging and plugin configuration.

Last, but not least, you really should use distinct Maven modules for client and server side code, plus possibly a third module for shared code. For a small project though, using a single module could be enough (but you'll have to add some configuration / hacks to your POM if you don't want to deploy your client-side classes on your server).

That gives us, for a single-module project (mixed client- and server-side code in the same project), with the CodeHaus Mojo plugin:

<?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/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>

  <groupId>com.example</groupId>
  <artifactId>test</artifactId>
  <version>1.0-SNAPSHOT</version>
  <packaging>war</packaging>

  <dependencyManagement>
    <dependencies>
      <dependency>
        <groupId>com.google.gwt</groupId>
        <artifactId>gwt</artifactId>
        <version>2.7.0</version>
        <type>pom</type>
        <scope>import</scope>
      </dependency>
    </dependencies>
  </dependencyManagement>
  <dependencies>
    <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>com.google.gwt</groupId>
      <artifactId>gwt-codeserver</artifactId>
      <scope>provided</scope>
    </dependency>
    <dependency>
      <groupId>com.google.gwt</groupId>
      <artifactId>gwt-servlet</artifactId>
      <scope>runtime</scope>
    </dependency>
  </dependencies>

  <build>
    <plugins>
      <plugin>
        <groupId>org.codehaus.mojo</groupId>
        <artifactId>gwt-maven-plugin</artifactId>
        <version>2.7.0</version>
        <executions>
          <execution>
            <goals>
              <goal>compile</goal>
            </goals>
          </execution>
        </executions>
        <configuration>
          <module>com.example.test.Test</module>
        </configuration>
      </plugin>
    </plugins>
  </build>
</project>

And use mvn gwt:run to run DevMode (which will also run your server-side code, with some limitations).

Or for the net.ltgt plugin:

<?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/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>

  <groupId>com.example</groupId>
  <artifactId>test</artifactId>
  <version>1.0-SNAPSHOT</version>
  <packaging>gwt-app</packaging>

  <dependencyManagement>
    <dependencies>
      <dependency>
        <groupId>com.google.gwt</groupId>
        <artifactId>gwt</artifactId>
        <version>2.7.0</version>
        <type>pom</type>
        <scope>import</scope>
      </dependency>
    </dependencies>
  </dependencyManagement>
  <dependencies>
    <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>com.google.gwt</groupId>
      <artifactId>gwt-codeserver</artifactId>
      <scope>provided</scope>
    </dependency>
    <dependency>
      <groupId>com.google.gwt</groupId>
      <artifactId>gwt-servlet</artifactId>
      <scope>runtime</scope>
    </dependency>
  </dependencies>

  <build>
    <plugins>
      <plugin>
        <groupId>net.ltgt.gwt.maven</groupId>
        <artifactId>gwt-maven-plugin</artifactId>
        <version>1.0-beta-1</version>
        <extensions>true</extensions>
        <configuration>
          <moduleName>com.example.test.Test</moduleName>
          <launcherDir>${project.build.directory}/${project.build.finalName}</launcherDir>
        </configuration>
      </plugin>
    </plugins>
  </build>
</project>

And use mvn gwt:codeserver to run SuperDevMode (client-side code only). You'll have to use the jetty-maven-plugin or tomcat7-maven-plugin to run your server-side code though.


For a multi-module project, have a look at my archetypes: https://github.com/tbroyer/gwt-maven-archetypes I'm in the process of migrating them to the net.ltgt plugin, simplifying how you'll run them (no need to mvn install anymore; mvn gwt:codeserver has been designed for multi-module projects, contrary to CodeHaus Mojo's gwt:run and gwt:run-codeserver)

Disclaimer: I'm the maintainer for both plugins, but I'd favor my own plugin, which IMO fixes a lot of quirks and mistakes and legacy of the CodeHaus Mojo one.

Upvotes: 8

spg
spg

Reputation: 9837

Taken from https://github.com/ArcBees/arcbees-website/blob/master/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/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>com.arcbees</groupId>
    <artifactId>website</artifactId>
    <version>3.0-SNAPSHOT</version>
    <packaging>war</packaging>
    <name>Arcbees Website</name>

    <properties>
        <target.jdk>1.7</target.jdk>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>

        <maven-surefire-plugin.version>2.6</maven-surefire-plugin.version>
        <maven-compiler-plugin.version>2.3.2</maven-compiler-plugin.version>
        <maven-gae-plugin.version>0.9.5</maven-gae-plugin.version>
        <gwt-maven-plugin.version>2.7.0</gwt-maven-plugin.version>
        <maven-clean-plugin.version>2.6.1</maven-clean-plugin.version>

        <gwt.version>2.7.0</gwt.version>
        <gae.version>1.9.9</gae.version>
        <gwtp.version>1.5-SNAPSHOT</gwtp.version>
        <guice.version>3.0</guice.version>
        <gin.version>2.1.2</gin.version>
        <gsss.version>1.0-SNAPSHOT</gsss.version>
        <gwtquery.version>1.4.3-SNAPSHOT</gwtquery.version>
        <gwt-maps-api.version>3.10.0-alpha-7</gwt-maps-api.version>
        <tooltip.version>1.1</tooltip.version>
        <appear.version>1.0-SNAPSHOT</appear.version>
        <gwtchosen.version>2.0.0-SNAPSHOT</gwtchosen.version>
        <guava.version>18.0</guava.version>
        <universal-analytics.version>2.1</universal-analytics.version>
        <velocity.version>1.7</velocity.version>
        <gwt-seo.version>0.1-SNAPSHOT</gwt-seo.version>

        <webappDirectory>${project.build.directory}/${project.build.finalName}</webappDirectory>
        <gae.home>
            ${settings.localRepository}/com/google/appengine/appengine-java-sdk/${gae.version}/appengine-java-sdk-${gae.version}
        </gae.home>
    </properties>

    <repositories>
        <repository>
            <id>sonatype.snapshots</id>
            <name>Sonatype snapshot repository</name>
            <url>https://oss.sonatype.org/content/repositories/snapshots/</url>
            <snapshots>
                <enabled>true</enabled>
            </snapshots>
        </repository>
    </repositories>

    <dependencies>
        <!-- Google Web Toolkit dependencies -->
        <dependency>
            <groupId>com.google.gwt</groupId>
            <artifactId>gwt-user</artifactId>
            <version>${gwt.version}</version>
            <scope>provided</scope>
        </dependency>

        <!-- GWT-Platform dependencies -->
        <dependency>
            <groupId>com.gwtplatform</groupId>
            <artifactId>gwtp-mvp-client</artifactId>
            <version>${gwtp.version}</version>
            <scope>provided</scope>
        </dependency>

        <!-- DI dependencies -->
        <dependency>
            <groupId>com.google.gwt.inject</groupId>
            <artifactId>gin</artifactId>
            <version>${gin.version}</version>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>com.google.inject</groupId>
            <artifactId>guice</artifactId>
            <version>${guice.version}</version>
        </dependency>

        <!-- Other -->
        <dependency>
            <groupId>com.arcbees.seo</groupId>
            <artifactId>gwt-seo</artifactId>
            <version>${gwt-seo.version}</version>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>com.arcbees.gss</groupId>
            <artifactId>gsss</artifactId>
            <version>${gsss.version}</version>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>com.googlecode.gwtquery</groupId>
            <artifactId>gwtquery</artifactId>
            <version>${gwtquery.version}</version>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>com.gwtplatform</groupId>
            <artifactId>gwtp-crawler</artifactId>
            <version>${gwtp.version}</version>
        </dependency>
        <dependency>
            <groupId>com.github.branflake2267</groupId>
            <artifactId>gwt-maps-api</artifactId>
            <version>${gwt-maps-api.version}</version>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>com.arcbees.gquery</groupId>
            <artifactId>tooltip</artifactId>
            <version>${tooltip.version}</version>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>com.arcbees.gquery</groupId>
            <artifactId>appear</artifactId>
            <version>${appear.version}</version>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>com.arcbees.analytics</groupId>
            <artifactId>universal-analytics</artifactId>
            <version>${universal-analytics.version}</version>
        </dependency>
        <dependency>
            <groupId>com.google.guava</groupId>
            <artifactId>guava-gwt</artifactId>
            <version>${guava.version}</version>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>com.google.guava</groupId>
            <artifactId>guava</artifactId>
            <version>${guava.version}</version>
            <scope>compile</scope>
        </dependency>
        <dependency>
            <groupId>com.arcbees</groupId>
            <artifactId>gwtchosen</artifactId>
            <version>${gwtchosen.version}</version>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>org.apache.velocity</groupId>
            <artifactId>velocity</artifactId>
            <version>${velocity.version}</version>
        </dependency>
    </dependencies>

    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>com.google.gwt</groupId>
                <artifactId>gwt-user</artifactId>
                <version>${gwt.version}</version>
                <scope>provided</scope>
            </dependency>
            <dependency>
                <groupId>com.google.gwt</groupId>
                <artifactId>gwt-dev</artifactId>
                <version>${gwt.version}</version>
                <scope>provided</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>

    <build>
        <!--suppress MavenModelInspection -->
        <outputDirectory>${webappDirectory}/WEB-INF/classes</outputDirectory>

        <plugins>
            <plugin>
                <groupId>org.codehaus.mojo</groupId>
                <artifactId>gwt-maven-plugin</artifactId>
                <version>${gwt-maven-plugin.version}</version>

                <configuration>
                    <module>com.arcbees.website.Arcbees</module>
                    <testTimeOut>180</testTimeOut>
                    <includes>**/*GwtTest.java</includes>
                    <mode>htmlunit</mode>

                    <extraJvmArgs>-Xss1024K -Xmx1024M -XX:MaxPermSize=512M -Duser.language=en -Duser.country=US
                    </extraJvmArgs>
                    <logLevel>INFO</logLevel>

                    <copyWebapp>true</copyWebapp>
                    <hostedWebapp>${webappDirectory}</hostedWebapp>

                    <extraParam>true</extraParam>
                    <extra>extras</extra>
                    <optimizationLevel>9</optimizationLevel>
                    <deploy>${project.build.directory}/gwtDeploy</deploy>
                </configuration>
                <executions>
                    <execution>
                        <goals>
                            <goal>resources</goal>
                            <goal>compile</goal>
                            <goal>test</goal>
                        </goals>
                    </execution>
                </executions>

            </plugin>

            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>${maven-compiler-plugin.version}</version>
                <configuration>
                    <source>${target.jdk}</source>
                    <target>${target.jdk}</target>
                    <encoding>${project.build.sourceEncoding}</encoding>
                    <!-- Disable annotation processors during normal compilation -->
                    <proc>none</proc>
                </configuration>
            </plugin>

            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-war-plugin</artifactId>
                <version>2.4</version>
                <executions>
                    <execution>
                        <phase>compile</phase>
                        <goals>
                            <goal>exploded</goal>
                        </goals>
                    </execution>
                </executions>
                <configuration>
                    <webappDirectory>${webappDirectory}</webappDirectory>
                    <webResources>
                        <resource>
                            <directory>src/main/webapp/WEB-INF</directory>
                            <filtering>true</filtering>
                            <includes>
                                <include>appengine-web.xml</include>
                            </includes>
                            <targetPath>WEB-INF</targetPath>
                        </resource>
                    </webResources>
                </configuration>
            </plugin>

            <plugin>
                <groupId>net.kindleit</groupId>
                <artifactId>maven-gae-plugin</artifactId>
                <version>${maven-gae-plugin.version}</version>
                <dependencies>
                    <dependency>
                        <groupId>net.kindleit</groupId>
                        <artifactId>gae-runtime</artifactId>
                        <version>1.8.8</version>
                        <type>pom</type>
                    </dependency>
                </dependencies>
                <configuration>
                    <sdkDir>${gae.home}</sdkDir>
                    <serverId>appengine-credentials</serverId>
                    <splitJars>true</splitJars>
                </configuration>
                <executions>
                    <execution>
                        <id>install-server-jar</id>
                        <phase>validate</phase>
                        <goals>
                            <goal>unpack</goal>
                        </goals>
                    </execution>
                    <execution>
                        <id>deploy</id>
                        <goals>
                            <goal>deploy</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>
    <profiles>
        <profile>
            <id>sdm</id>
            <build>
                <plugins>
                    <plugin>
                        <groupId>org.codehaus.mojo</groupId>
                        <artifactId>gwt-maven-plugin</artifactId>
                        <version>${gwt-maven-plugin.version}</version>
                        <configuration>
                            <module>com.arcbees.website.ArcbeesDev</module>
                        </configuration>
                    </plugin>
                </plugins>
            </build>
        </profile>
    </profiles>

    <distributionManagement>
        <repository>
            <id>local-target</id>
            <url>file://${project.build.directory}/distribution/release</url>
        </repository>
    </distributionManagement>

</project>

Upvotes: 2

Related Questions