How do I move the main HTML file to src/main/webapp/index.html?

159 views
Skip to first unread message

Matt Raible

unread,
Feb 18, 2009, 1:51:31 PM2/18/09
to gwt-...@googlegroups.com
Rather than having my application's HTML file in
src/main/java/com/mycompany/Application.html, I'd like to move it to
src/main/webapp/index.html. I tried copying the HTML and adding the
following to my index.html, but no dice:

<meta name="gwt:module" content="com.mycompany.Application"/>

Is this possible with the gwt-maven-plugin? I'd like to have my main
HTML and CSS at the root of my application.

Thanks,

Matt

Robert "kebernet" Cooper

unread,
Feb 18, 2009, 2:02:17 PM2/18/09
to gwt-...@googlegroups.com
Actually, I don't think you even need to do that anymore. With the
1.4+ bootstrap, just include
<script src="my.Module/my.Module.nocache.js" >

in your webapp/index.html file.
--
:Robert "kebernet" Cooper
::kebe...@gmail.com
Alice's cleartext
Charlie is the attacker
Bob signs and encrypts
http://pgp.mit.edu:11371/pks/lookup?op=get&search=0x9E8759F8

Matt Raible

unread,
Feb 18, 2009, 3:18:58 PM2/18/09
to gwt-...@googlegroups.com
What do I change my pom.xml's runTarget to? It's current set at:

<runTarget>com.mycompany.Application/Application.html</runTarget>

If I make your suggested change and change my runLevel to:

<runTarget>index.html</runTarget>

I get the following error in hosted mode:

Unable to find/load module 'index.html' (see server log for details)

Thanks,

Matt

Robert "kebernet" Cooper

unread,
Feb 18, 2009, 3:34:32 PM2/18/09
to gwt-maven
Aah, yeah. You can't actually do that with the hosted mode browser.
You would need to deploy the war (or start it in-place) and run the
shell in noserver mode.

2009/2/18 Matt Raible <mra...@gmail.com>:

Robert "kebernet" Cooper

unread,
Feb 18, 2009, 3:34:37 PM2/18/09
to gwt-maven
Rather "do that with the hosted mode tomcat"..

2009/2/18 Robert "kebernet" Cooper <kebe...@gmail.com>:

Matt Raible

unread,
Feb 18, 2009, 4:23:03 PM2/18/09
to gwt-...@googlegroups.com
Is there a way to use the gwt-maven plugin to allow running in hosted
mode, as well as deploying the app at root?

Thanks,

Matt

On Wed, Feb 18, 2009 at 1:34 PM, Robert kebernet Cooper

Matt Raible

unread,
Feb 23, 2009, 5:23:17 PM2/23/09
to gwt-maven
I was able to solve this by adding the UrlRewriteFilter to my project
with the following configuration in WEB-INF/urlrewrite.xml:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE urlrewrite PUBLIC "-//tuckey.org//DTD UrlRewrite 3.0//EN"
"http://tuckey.org/res/dtds/urlrewrite3.0.dtd">

<urlrewrite>
<rule>
<from>/$</from>
<to type="forward" last="true">/com.mycompany.app.Application/
Application.html</to>
</rule>
<rule>
<from>/index.html</from>
<to type="forward" last="true">/com.mycompany.app.Application/
Application.html</to>
</rule>
<rule>
<from>^/(.*)\.(.*)$</from>
<to type="forward">/com.mycompany.app.Application/$1.$2</to>
</rule>
</urlrewrite>

Hope this helps someone else.

Matt

On Feb 18, 2:23 pm, Matt Raible <mrai...@gmail.com> wrote:
> Is there a way to use the gwt-maven plugin to allow running in hosted
> mode, as well as deploying the app at root?
>
> Thanks,
>
> Matt
>
> On Wed, Feb 18, 2009 at 1:34 PM, Robert kebernet Cooper
>
> <keber...@gmail.com> wrote:
>
> > Rather "do that with the hosted mode tomcat"..
>
> > 2009/2/18 Robert "kebernet" Cooper <keber...@gmail.com>:
> >> Aah, yeah. You can't actually do that with the hosted mode browser. You would need to deploy the war (or start it in-place) and run the shell in noserver mode.
>
> >> 2009/2/18 Matt Raible <mrai...@gmail.com>:
>
> >>> What do I change my pom.xml's runTarget to? It's current set at:
>
> >>> <runTarget>com.mycompany.Application/Application.html</runTarget>
>
> >>> If I make your suggested change and change my runLevel to:
>
> >>> <runTarget>index.html</runTarget>
>
> >>> I get the following error in hosted mode:
>
> >>> Unable to find/load module 'index.html' (see server log for details)
>
> >>> Thanks,
>
> >>> Matt
>
> >>> On Wed, Feb 18, 2009 at 12:02 PM, Robert kebernet Cooper
> >>> <keber...@gmail.com> wrote:
>
> >>>> Actually, I don't think you even need to do that anymore. With the
> >>>> 1.4+ bootstrap, just include
> >>>> <script src="my.Module/my.Module.nocache.js" >
>
> >>>> in your webapp/index.html file.
>
> >>>> On Wed, Feb 18, 2009 at 1:51 PM, Matt Raible <mrai...@gmail.com> wrote:
>
> >>>>> Rather than having my application's HTML file in
> >>>>> src/main/java/com/mycompany/Application.html, I'd like to move it to
> >>>>> src/main/webapp/index.html. I tried copying the HTML and adding the
> >>>>> following to my index.html, but no dice:
>
> >>>>> <meta name="gwt:module" content="com.mycompany.Application"/>
>
> >>>>> Is this possible with the gwt-maven-plugin? I'd like to have my main
> >>>>> HTML and CSS at the root of my application.
>
> >>>>> Thanks,
>
> >>>>> Matt
>
> >>>> --
> >>>> :Robert "kebernet" Cooper
> >>>> ::keber...@gmail.com
> >>>> Alice's cleartext
> >>>> Charlie is the attacker
> >>>> Bob signs and encrypts
> >>>>http://pgp.mit.edu:11371/pks/lookup?op=get&search=0x9E8759F8
>
> >> --
> >> :Robert "kebernet" Cooper
> >> ::keber...@gmail.com
> >> Alice's cleartext
> >> Charlie is the attacker
> >> Bob signs and encrypts
> >>http://pgp.mit.edu:11371/pks/lookup?op=get&search=0x9E8759F8
>
> > --
> > :Robert "kebernet" Cooper
> > ::keber...@gmail.com

Konstantin V. Fedorov

unread,
Feb 23, 2009, 11:26:54 PM2/23/09
to gwt-maven
Another workaround which may be satisfactory in some scenarios would
be place your index.html where you need it with content which only
performs HTTP redirections:
<html>
<head>
<meta http-equiv="Refresh" content="0; URL=my.Application/
Application.html">
</head>
</html>

jgenender

unread,
Feb 24, 2009, 11:57:42 AM2/24/09
to gwt-maven
Hi Matt. You really don't need to do any URLRewriting. The key here
is that the artifacts produced by GWT are relative. This means that
you shouldn't care if you have the package name while running in
hosted mode, but your war can have it all w/o the package name. If
you really do want to run in hosted mode w/o the package name, then I
would recommend using the jetty maven plugin and use Hosted mode in
the noserver configuration. Here is a quick walk through...

The secret in the sauce is using the jetty maven plugin's semi-new
overlay feature. This allows you to merge your webapp directory with
the GWT output. Here I am using jetty with HSQL and my module name is
com.example.MyApp:

<plugin>
<groupId>org.mortbay.jetty</groupId>
<artifactId>maven-jetty-plugin</artifactId>
<version>6.1.14</version>
<dependencies>
<dependency>
<groupId>commons-dbcp</groupId>
<artifactId>commons-dbcp</artifactId>
<version>${commonsDbcpVersion}</
version>
</dependency>
<dependency>
<groupId>commons-pool</groupId>
<artifactId>commons-pool</artifactId>
<version>${commonsPoolVersion}</
version>
</dependency>
<dependency>
<groupId>hsqldb</groupId>
<artifactId>hsqldb</artifactId>
<version>${hsqldbVersion}</version>
</dependency>
</dependencies>
<configuration>
<webAppConfig>
<contextPath>/</contextPath>
<!--- LOOKY HERE ... THIS IS THE KEY -
USING OVERLAYS -->
<baseResource
implementation="org.mortbay.resource.ResourceCollection">
<resourcesAsCSV>${basedir}/src/main/
webapp,${basedir}/target/myapp/com.example.MyApp</resourcesAsCSV>
</baseResource>
</webAppConfig>
<!-- My jetty config - I think you can
figure this part out yourself -->
<jettyConfig>${basedir}/src/test/jetty/
hsql/jetty.xml</jettyConfig>
<scanIntervalSeconds>5</
scanIntervalSeconds>
<scanTargets>
<scanTarget>${basedir}/src/main/
resources</scanTarget>
<scanTarget>${basedir}/src/main/
webapp</scanTarget>
<scanTarget>${basedir}/target/myapp/
com.example.MyApp</scanTarget>
</scanTargets>
<systemProperties>
<!-- Just some HSQL config stuff - just
ignore for now -->
<systemProperty>
<name>dbtest</name>
<value>${basedir}/src/test/db/
testdb</value>
</systemProperty>
<systemProperty>
<name>hibernate_driver</name>
<value>org.hsqldb.jdbcDriver</
value>
</systemProperty>
<systemProperty>
<name>hibernate_dialect</name>

<value>com.example.myapp.util.CustomHSQLDialect</value>
</systemProperty>
</systemProperties>
</configuration>
</plugin>

The next part is telling the war packager to get rid of the package
name, so when you deploy, you don't have that nasty module name:

<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-war-plugin</artifactId>
<configuration>
<webappDirectory>${project.build.directory}/$
{project.build.finalName}/com.example.MyApp</webappDirectory>
</configuration>
</plugin>

Now you can run mvn jetty:run and then run GWT in --noserver mode.
You will notice that you can startup GWT with http://localhost:8080/index.html.
You can put your index.html as your launch pad for your application.

Now, if you want to run it all in hosted mode, including Spring,
Hibernate, etc under Tomcat... I can post that configuration as its
much more involved. However, you will have to live with the module
name when running it in full hosted mode, but your deployment/war will
not have the module name (due to the maven war config posted above).
Just be sure you are not hard-coding URLs in your code and that
everything is relative.

I hope this helps. If you have issues...post the results and I will
see if I can fill in the blanks.

jgenender

unread,
Feb 24, 2009, 12:50:35 PM2/24/09
to gwt-maven
Let me fill in some blanks too before you try...

Here is my index.html file in my webapp directory:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html>
<head>
<meta http-equiv="REFRESH" content="0;url=MyApp.html">
</head>
</html>

Your run target can then be:

<runTarget>index.html</runTarget>

As long as you are running it in noserver mode.

You can also set up the maven war plugin to ignore the MyApp.html and
use its contents in an index.html file.
> You will notice that you can startup GWT withhttp://localhost:8080/index.html.

Matt Raible

unread,
Feb 24, 2009, 3:27:23 PM2/24/09
to gwt-maven
Thanks Jeff - works great! I updated my blog post with this
information:

http://raibledesigns.com/rd/entry/enhancing_your_gwt_application_with

Cheers,

Matt
> ...
>
> read more »

Charlie Collins

unread,
Feb 24, 2009, 4:20:02 PM2/24/09
to gwt-maven
The plugin also has a "webXmlPathAsIs" parameter, which might help if
you want to strip the path.
http://gwt-maven.googlecode.com/svn/docs/maven-googlewebtoolkit2-plugin/compile-mojo.html#webXmlServletPathAsIs

I don't use that, but someone asked for it back when.
> ...
>
> read more »

Robert "kebernet" Cooper

unread,
Feb 24, 2009, 4:30:02 PM2/24/09
to gwt-...@googlegroups.com
Because there aren't enough options here, I would also note that
mergewebxml now honors <module rename-to="XXX"> properly in SVN.
--
:Robert "kebernet" Cooper
::kebe...@gmail.com

Robert "kebernet" Cooper

unread,
Feb 24, 2009, 10:05:37 PM2/24/09
to gwt-...@googlegroups.com
FWIW, it looks like the hosted mode in 1.6 will honor your target/[web
app a splode] folder in hosted mode now too. I think that is it -- the
new HostedMode class is segfaulting for me on the mac.
Reply all
Reply to author
Forward
0 new messages