现在最新的Eclipse Luna Release 已经内置了Maven插件,这让我们的工作简洁了不少,只要把项目直接导入就可以,不用考虑插件什么的问题,但是导入之后的项目既可以部署在Tomcat也可以部署在Jetty服务器上,以下是调试过程。
Java: JDK7
Eclipse: Eclipse Java EE IDE for Web Developers ,Version:Luna Release (4.4.0)
Maven: 3.2.5
Tomcat: 7
Tomcat7和8的配置用户权限是一样的,更多可以参考官方文档(http://tomcat.apache.org/)的说明。此外配置独立服务器还要修改Tomcat的tomcat-user.xml文件,把用户权限加进去。
<role rolename="manager-gui"/>
<role rolename="admin-gui"/>
<user password="admin" roles="manager-gui,admin-gui,manager-script" username="admin"/>
其中manager-gui和admin-gui是Tomcat的管理界面,manager-script指的就是maven插件可以访问的用户权限规则
Tomcat7可以参考在官方文档(http://tomcat.apache.org/maven-plugin-2.2/)中关于maven插件的配置。
1 <build>
2
3 <pluginManagement>
4 <plugins>
5 <plugin>
6 <groupId>org.apache.maven.pluginsgroupId>
7 <artifactId>maven-war-pluginartifactId>
8 <version>2.1.1version>
9 <configuration>
10 <webXml>src/main/webapp/WEB-INF/web.xmlwebXml>
11 configuration>
12 plugin>
13
14 <plugin>
15 <groupId>org.apache.tomcat.mavengroupId>
16 <artifactId>tomcat7-maven-pluginartifactId>
17 <version>2.2version>
18 <configuration>
19 <url>http://localhost:8080/xpxiaowuApp/url>
20 <username>adminusername>
21 <password>adminpassword>
22 configuration>
23 plugin>
24
25 plugins>
26 pluginManagement>
27
28 build>
在第19行,Web App在Tomcat中的部署地址。
三.运行Tomcat7的Maven插件
以上步骤配置好后,在命令行输入命令:
mvn tomcat7:run
如果一切顺利,会出现一下提示。
D:\workspace_maven>mvn tomcat7:run
[INFO] Scanning for projects...
[INFO]
[INFO] ------------------------------------------------------------------------
[INFO] Building xpxiaowuApp 0.0.1-SNAPSHOT
[INFO] ------------------------------------------------------------------------
[INFO]
[INFO] >>> tomcat7-maven-plugin:2.2:run (default-cli) > process-classes @ xpxiao
wuApp >>>
[INFO]
[INFO] --- maven-resources-plugin:2.6:resources (default-resources) @ xpxiaowuAp
p ---
[WARNING] Using platform encoding (GBK actually) to copy filtered resources, i.e
. build is platform dependent!
[INFO] Copying 0 resource
[INFO]
[INFO] --- maven-compiler-plugin:3.1:compile (default-compile) @ xpxiaowuApp ---
[INFO] Nothing to compile - all classes are up to date
[INFO]
[INFO] <<< tomcat7-maven-plugin:2.2:run (default-cli) < process-classes @ xpxiaowuApp <<<
[INFO]
[INFO] --- tomcat7-maven-plugin:2.2:run (default-cli) @ xpxiaowuApp ---
[INFO] Running war on http://localhost:8080/xpxiaowuApp
[INFO] Using existing Tomcat server configuration at D:\workspace_maven\target\tomcat
[INFO] create webapp with contextPath: /xpxiaowuApp
五月 27, 2015 9:17:12 下午 org.apache.coyote.AbstractProtocol init
信息: Initializing ProtocolHandler ["http-bio-8080"]
五月 27, 2015 9:17:12 下午 org.apache.catalina.core.StandardService startInternal
信息: Starting service Tomcat
五月 27, 2015 9:17:12 下午 org.apache.catalina.core.StandardEngine startInternal
信息: Starting Servlet Engine: Apache Tomcat/7.0.47
五月 27, 2015 9:17:13 下午 org.apache.coyote.AbstractProtocol start
信息: Starting ProtocolHandler ["http-bio-8080"]
在浏览器中输入 http://localhost:8080/xpxiaowuApp/ ,可以看到欢迎页面。
注意: 实验证明以上步骤在Tomcat8中同样配置成功。
1 Jetty可以参考官方文档( http://www.eclipse.org/jetty/documentation/current/jetty-maven-plugin.html)
1 <plugin>
2 <groupId>org.eclipse.jettygroupId>
3 <artifactId>jetty-maven-pluginartifactId>
4
5 plugin>
以上步骤配置好后,在命令行输入命令:
mvn jetty:run
在浏览器输入 http://127.0.0.1:8080/xpxiaowuApp/index.html 就可以访问项目了。
2 设置(修改)jetty(maven插件maven-jetty-plugi)的端口 ,例如下面的配置文档。
<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.0modelVersion>
<groupId>com.xinpinggroupId>
<artifactId>TestWebartifactId>
<version>0.0.1-SNAPSHOTversion>
<packaging>warpackaging>
<properties>
<project.build.sourceEncoding>UTF-8project.build.sourceEncoding>
properties>
<build>
<finalName>TestWebfinalName>
<pluginManagement>
<plugins>
<plugin>
<groupId>org.mortbay.jettygroupId>
<artifactId>maven-jetty-pluginartifactId>
<configuration>
<scanIntervalSeconds>3scanIntervalSeconds>
<connectors>
<connector implementation="org.mortbay.jetty.nio.SelectChannelConnector">
<port>8080port>
connector>
connectors>
configuration>
plugin>
plugins>
pluginManagement>
build>
project>
注意:maven集成jetty插件后会出现问题
1 现象
运行 mvn jetty:run 以后,发现静态资源文件修改后无法保存,IDE 提示 “请求的操作无法在使用用户映射区域打开的文件上执行”。
2 解决方案:
版本:jetty 6.1.22
找到 .m2\repository\org\mortbay\jetty\jetty\6.1.22 修改 jetty-6.1.22.jar 中 org/mortbay/jetty/webapp/webdefault.xml 文件
修改
<init-param>
<param-name>useFileMappedBufferparam-name>
<param-value>trueparam-value>
init-param>
为
<init-param>
<param-name>useFileMappedBufferparam-name>
<param-value>falseparam-value>
init-param>
然后放到 maven工程的 src/main/resources下,修改配置文件:
<build>
<finalName>javaWebProfinalName>
<pluginManagement>
<plugins>
<plugin>
<groupId>org.mortbay.jettygroupId>
<artifactId>maven-jetty-pluginartifactId>
<configuration>
<scanIntervalSeconds>3scanIntervalSeconds>
<connectors>
<connector implementation="org.mortbay.jetty.nio.SelectChannelConnector">
<port>8080port>
connector>
connectors>
<webAppConfig>
<defaultsDescriptor>src/main/resources/webdefault.xmldefaultsDescriptor>
webAppConfig>
configuration>
plugin>
plugins>
pluginManagement>
build>
在 Eclipse中点击Maven的Web项目,右键选择Run As => Maven Build
在配置窗口中Goals列中填写Maven命令: jetty:run , 保存配置,然后运行这个配置。
此时查看Eclipse的console控制台,会给出以下提示信息:
<repositories>
<repository>
<id>maven-restletid>
<name>Public online Restlet repositoryname>
<url>http://maven.restlet.orgurl>
repository>
<repository>
<id>maven2-repository.java.netid>
<name>Java.net Repository for Mavenname>
<url>http://download.java.net/maven/2/url>
repository>
<repository>
<id>oschina Releasesid>
<name>oschina Releasesname>
<url>http://maven.oschina.net/content/groups/publicurl>
repository>
<repository>
<id>nexus-oscid>
<name>Nexus oscname>
<url>http://maven.oschina.net/content/groups/public/url>
repository>
<repository>
<id>nexus-osc-thirdpartyid>
<name>thirdpartyname>
<url>http://maven.oschina.net/content/repositories/thirdparty/url>
repository>
<repository>
<id>snapshot-repository.java.netid>
<name>Java.net Snapshot Repository for Mavenname>
<url>https://maven.java.net/content/repositories/snapshots/url>
<layout>defaultlayout>
repository>
repositories>