使用Maven創建一個簡單的web應用,使用如下命令
mvn archetype:create -DgroupId=com.mycompany.app -DartifactId=my-webapp -DarchetypeArtifactId=maven-archetype-webapp
切換到
my-webapp目錄下,可以找到項目對象模型pom.xml
<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.mycompany.app</groupId>
<artifactId>my-webapp</artifactId>
<packaging>war</packaging>
<version>1.0-SNAPSHOT</version>
<name>my-webapp Maven Webapp</name>
<url>http://maven.apache.org</url>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.1</version>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<finalName>my-webapp</finalName>
</build>
</project>
其中
packaging標簽的值為war,這種打包類型配置讓Maven以war文件的形式生成一個web應用。一個打包類型為war的項目,將會在target/目錄創建一個war文件,這個文件的默認名稱是content-zh-webapp-0.6-SNAPSHOT.war。對于這個項目,默認的war文件是target/simple-webapp-1.0-SNAPSHOT.war。在這個項目中,我們已經通過在項目的構建配置中加入fileName元素來定義生成的war文件的名稱,根據這個設置,package階段生成的war文件為target/my-webapp.war。除此以外,還
可以看到src/main/webapp下生成了簡單的一個index.jsp以及WEB-INF下的web項目配置文件web.xml。
接下來我們打包程序,運行如下命令
mvn clean package
在
my-webapp/target目錄下,我們看到了生成的my-webapp.war。
配置Jetty插件
在編譯并打包了我們的web應用之后,我們想要將它部署到一個servlet容器中,然后測試一下由Maven Archetype插件生成的index.jsp。一般我們發布web程序都需要下載Jetty或Tomcat等web容器,解壓分發包,然后將我們打好的war包拷貝到webapps目錄下,然后啟動服務器。利用Maven的Jetty插件可以省去這些步驟,在Maven中運行我們的web應用。為此,我們需要在項目的pom.xml文件中配置Jetty插件,配置后的pom.xml如下
<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.mycompany.app</groupId>
<artifactId>my-webapp</artifactId>
<packaging>war</packaging>
<version>1.0-SNAPSHOT</version>
<name>my-webapp Maven Webapp</name>
<url>http://maven.apache.org</url>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.1</version>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<finalName>my-webapp</finalName>
<plugins>
<plugin>
<groupId>org.mortbay.jetty</groupId>
<artifactId>maven-jetty-plugin</artifactId>
</plugin>
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>1.6</source>
<target>1.6</target>
</configuration>
</plugin>
</plugins>
</build>
</project>
上面的文件除了jetty外,還配置了maven-compiler-plugin編譯插件,此插件可以用來指定編譯器版本,以及其他一些編譯細節。
修改完成后,運行如下命令,就可以啟動jetty發布我們的web應用了。
mvn jetty:run
控制臺打印顯示服務已經啟動
[INFO] Configuring Jetty for project: my-webapp Maven Webapp
[INFO] Webapp source directory = C:\Documents and Settings\caojh\my-webapp\src\main\webapp
[INFO] Reload Mechanic: automatic
[INFO] Classes = C:\Documents and Settings\caojh\my-webapp\target\classes
2011-01-27 19:46:21.028:INFO::Logging to STDERR via org.mortbay.log.StdErrLog
[INFO] Context path = /my-webapp
[INFO] Tmp directory = determined at runtime
[INFO] Web defaults = org/mortbay/jetty/webapp/webdefault.xml
[INFO] Web overrides = none
[INFO] web.xml file = C:\Documents and Settings\caojh\my-webapp\src\main\webapp\WEB-INF\web.xml
[INFO] Webapp directory = C:\Documents and Settings\caojh\my-webapp\src\main\webapp
[INFO] Starting jetty 6.1.26 
2011-01-27 19:46:21.200:INFO::jetty-6.1.26
2011-01-27 19:46:21.450:INFO::No Transaction manager found - if your webapp requires one, please configure one.
2011-01-27 19:46:21.731:INFO::Started SelectChannelConnector@0.0.0.0:8080
[INFO] Started Jetty Server
在瀏覽器中輸入http://localhost:8080/my-webapp/,就可以看到index.jsp頁面的內容了。
啟動與關閉Jetty
委托Jetty插件無限期運行的目標包括run、run-war和run-exploded。你可以在視窗控制終端(如DOS窗口)使用<ctrl-c>關閉它,或者在另一個視窗控制終端使用stop目標關閉。如果你希望能使用mvn jetty:stop 執行關閉命令,則需要你在插件中配置一個特殊的端口和控制鍵。下面是一個例子配置
<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.mycompany.app</groupId>
<artifactId>my-webapp</artifactId>
<packaging>war</packaging>
<version>1.0-SNAPSHOT</version>
<name>my-webapp Maven Webapp</name>
<url>http://maven.apache.org</url>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.1</version>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<finalName>my-webapp</finalName>
<plugins>
<plugin>
<groupId>org.mortbay.jetty</groupId>
<artifactId>maven-jetty-plugin</artifactId>
<configuration>
<stopPort>9966</stopPort>
<stopKey>foo</stopKey>
</configuration>
</plugin>
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>1.6</source>
<target>1.6</target>
</configuration>
</plugin>
</plugins>
</build>
</project>
啟動
mvn jetty:start
停止
mvn jetty:stop
至此一個簡單的web應用就完成了,你可以像其他web應用一樣對它進行添加修改了,而工程的調試運行還可以試用上面的jetty,還是很方便的。
更詳細的配置
http://docs.codehaus.org/display/JETTY/Maven+Jetty+Plugin