For an Eclipse WebContainer, I use an external jetty install (although
I think Jetty 7 now ships with Eclipse), a jetty-xml config file, and
a file-based (Run Config -> Common -> Save as local file) run
configuration specifying the main class and any other configuration.
Turned out to be a lot easier than trying to keep up with
JettyLauncher, and gave me more options. I can check both
configurations into the project, and by defining a jetty user library
(pointing to the jetty install libs), all of the other team members
can use it. They grab the jetty version of their choice, add it to
to their user lib, and it all just works.
For eclipse-based tutorials, this would all be straight-forward except
for the external jetty install, but if newer versions of eclipse ship
with jetty bundled, then that problem goes away.
It's generally useful info, so I sanitized my config files and
attached them to the message as well as included them inline as text.
=====================Jetty projectname.launch ====================
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<launchConfiguration type="org.eclipse.jdt.launching.localJavaApplication">
<stringAttribute key="bad_container_name"
value="jetty-run-configuration.eclipse"/>
<listAttribute key="org.eclipse.debug.core.MAPPED_RESOURCE_PATHS">
<listEntry value="/projectName"/>
</listAttribute>
<listAttribute key="org.eclipse.debug.core.MAPPED_RESOURCE_TYPES">
<listEntry value="4"/>
</listAttribute>
<stringAttribute key="org.eclipse.jdt.launching.MAIN_TYPE"
value="org.mortbay.start.Main"/>
<stringAttribute key="org.eclipse.jdt.launching.PROGRAM_ARGUMENTS"
value="jetty-projectName.xml"/>
<stringAttribute key="org.eclipse.jdt.launching.PROJECT_ATTR"
value="projectName"/>
<stringAttribute key="org.eclipse.jdt.launching.VM_ARGUMENTS"
value="-XX:MaxPermSize=256m
-Djetty.keystore.home=${workspace_loc:projectName}
-Djetty.webappRootDir=${workspace_loc:projectName}"/>
</launchConfiguration>
===================== ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ====================
=====================Jetty projectname.xml ====================
<?xml version="1.0"?>
<!DOCTYPE Configure PUBLIC "-//Mort Bay Consulting//DTD Configure//EN"
"http://jetty.mortbay.org/configure.dtd">
<Configure id="Server" class="org.mortbay.jetty.Server">
<Set name="ThreadPool">
<New class="org.mortbay.thread.BoundedThreadPool">
<Set name="minThreads">2</Set>
<Set name="lowThreads">2</Set>
<Set name="maxThreads">10</Set>
</New>
</Set>
<Call name="addConnector">
<Arg>
<New class="org.mortbay.jetty.security.SslSocketConnector">
<Set name="Port">4443</Set>
<Set name="maxIdleTime">30000</Set>
<Set name="keystore"><SystemProperty
name="jetty.keystore.home" default="." />/keystore-jetty</Set>
<Set name="password">password</Set>
<Set name="keyPassword">keyPassword</Set>
<Set name="truststore"><SystemProperty
name="jetty.keystore.home" default="." />/keystore-jetty</Set>
<Set name="trustPassword">trustPassword</Set>
</New>
</Arg>
</Call>
<Call name="addConnector">
<Arg>
<New class="org.mortbay.jetty.bio.SocketConnector">
<Set name="port"><SystemProperty name="jetty.port"
default="7777"/></Set>
<Set name="maxIdleTime">30000</Set>
<Set name="Acceptors">2</Set>
<Set name="confidentialPort">4443</Set>
</New>
</Arg>
</Call>
<Set name="handler">
<New id="handlers" class="org.mortbay.jetty.handler.HandlerCollection">
<Set name="handlers">
<Array type="org.mortbay.jetty.Handler">
<Item>
<New id="contexts"
class="org.mortbay.jetty.handler.ContextHandlerCollection"/>
</Item>
<Item>
<New id="defaultHandler"
class="org.mortbay.jetty.handler.DefaultHandler"/>
</Item>
<Item>
<New id="requestLog"
class="org.mortbay.jetty.handler.RequestLogHandler"/>
</Item>
</Array>
</Set>
</New>
</Set>
<New id="projectName" class="org.mortbay.jetty.webapp.WebAppContext">
<Arg><Ref id="contexts"/></Arg>
<Arg><SystemProperty name="jetty.webappRootDir" default="." /></Arg>
<Arg>/projectName</Arg>
</New>
<!-- =========================================================== -->
<!-- extra options -->
<!-- =========================================================== -->
<Set name="stopAtShutdown">true</Set>
<!-- ensure/prevent Server: header being sent to browsers -->
<Set name="sendServerVersion">true</Set>
<!-- JNDI data source
<Call name="addService">
<Arg>
<New class="org.mortbay.jetty.plus.JotmService">
<Call name="addDataSource">
<Arg>jdbc/db1</Arg>
<Arg>
<New class="org.apache.commons.dbcp.BasicDataSource">
<Set name="DriverName">oracle.jdbc.driver.OracleDriver</Set>
<Set name="Url">jdbc:oracle:thin..ourhost:1521:yourdb</Set>
<Set name="User">db1</Set>
<Set name="Password">passwd</Set>
</New>
</Arg>
</Call>
</New>
</Arg>
</Call>
-->
</Configure>
===================== ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ====================
On Fri, Dec 4, 2009 at 4:13 AM, Andrus Adamchik <andru..bjectstyle.org> wrote:
> I think I am giving up on an idea of a Maven-free tutorial. It will be just
> too hard for us to maintain... In return for introducing Maven to the
> "Getting Started" tutorials we'll get a these benefits:
>
> * Maven-based web container start (I am at a loss which webapp Eclipse
> plugin to recommend to users these days... They either suck or unsupported
> and out of date... I am personally using a Jetty launcher with main class
> that I wrote).
>
> * Declarative dependency management (instead of "download Derby from here",
> we just tell them to place it in the pom).
>
> * Tutorials code can be built together with Cayenne core, so they never
> become invalid (and there's a better chance they will be maintained), and
> also can be easily bundled with a release.
>
>
> The downsides are:
>
> * Some people just won't bother using Maven
>
> * Since dependency management is transparent, we don't show how to include
> dependent jars in the project.
>
> I guess Maven wins...
>
> Andrus
>
This archive was generated by hypermail 2.0.0 : Fri Dec 04 2009 - 10:49:36 EST