可能重复:
Maven 尝试部署到本地主机而不是远程服务器
我在这里有一个有趣的问题。我正在使用 Maven - 3.0.4 和 jdk 1.6 在 Windows 7 Pro x64 环境中工作
我在 Maven 的 settings.xml 中有:
<servers>
<server>
<id>LocalTomcatServer</id>
<username>localTomcatAdmin</username>
<password>password</password>
</server>
</servers>
在我的 tomcat-users.xml 文件中,我定义了:
<tomcat-users>
<role rolename="manager-gui"/>
<role rolename="manager-script"/>
<role rolename="admin"/>
<user username="localTomcatAdmin" password="password" roles="manager-gui,manager-script,admin"/>
</tomcat-users>
我还创建了一个 pom-deploy.xml,它是 pom.xml 的父级(位于同一级别),其中包含以下插件:
<plugin>
<groupId>org.apache.tomcat.maven</groupId>
<artifactId>tomcat7-maven-plugin</artifactId>
<version>2.0</version>
<configuration>
<server>LocalTomcatServer</server>
<path>/<path to deploy to></path>
<port>8080</port>
</configuration>
</plugin>
出于某种我无法理解的原因,当我运行 mvn -f pom-deploy.xml tomcat:deploy 时,我从 maven 得到以下输出。
[INFO] BUILD FAILURE
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 20.201s
[INFO] Finished at: Wed Dec 12 09:00:21 EST 2012
[INFO] Final Memory: 11M/149M
[INFO] ------------------------------------------------------------------------
[ERROR] Failed to execute goal org.codehaus.mojo:tomcat-maven-plugin:1.1:deploy (default-cli) on project <project name>: Cannot invoke Tomcat manager: Server returned HTTP response code: 403 for
URL: http://localhost:8080/manager/deploy?path=%2FTripTixRX&war= -> [Help 1]
每个其他生命周期目标都有效。
未为此项目配置 codehaus 插件。我已经尝试了 org.codehaus.mojo 插件并将其设置为http://127.0.0.1:8080/manager/html
输出似乎表明 url 没有被插件解析,但是,现在我已经切换到官方 tc7 插件,我认为这会缓解这个问题。
这几乎表明 maven 没有使用配置的插件。我已经清除了我的 .m2/repository 并重新开始。仍然没有运气。此时,我开始挖掘,发现它甚至没有下载tomcat7-maven-plugin。我在这里阅读了一些关于添加到 settings.xml 中的评论,我不情愿地这样做了。这对我来说似乎很违反直觉,但我想消除所有的可能性。我将 org.tomcat.apache.maven 添加到我的 settings.xml 文件中,用于 maven、rebuilt 和 blamo,它可以工作。
所以在这一点上,我很高兴它有效,但我很生气。在不修改每台机器的 maven settings.xml 配置的情况下,这不是完全消除了从一个 maven 环境到另一个环境的可移植性吗?我不应该为项目配置 Maven,但我认为配置应该完全驻留在 pom 中以获得最大的可移植性。
另外我不确定这是否是我的设置,但是没有关于“嘿,您配置的这个插件没有找到!”的消息。我不得不 -X -e 并将我的屁股拖过输出日志,甚至可以远程了解最终问题“可能”是什么。
让它发挥作用从来都不是问题,这就是为什么。似乎必须像这样定义它,从我的角度来看,项目可移植性已经出现了。这是我的 Maven 配置的结果还是这是常态?从阅读其他用户关于此的帖子来看,这似乎是 maven 中的正常现象。我想最终的结果是“我很高兴我回答了这个问题”,但我更关注如何以及为什么机制。
编辑:我正在运行的命令是: mvn -f pom-deploy.xml -U -Dmaven.test.skip=true clean package tomcat7:deploy -X -e
这是 maven 输出的一个片段,它仍然显示没有身份验证服务器:
[DEBUG] Configuring mojo org.apache.tomcat.maven:tomcat7-maven-plugin:2.0:deploy from plugin realm ClassRealm[plugin>org.apache.tomcat.maven:tomcat7-maven-plugin:2.0, parent: sun.misc.Launcher$AppClassLoader@c22b29a]
[DEBUG] Configuring mojo 'org.apache.tomcat.maven:tomcat7-maven-plugin:2.0:deploy' with basic configurator -->
[DEBUG] (f) charset = ISO-8859-1
[DEBUG] (f) contextFile = `E:\workspace\<repo-name>\branches\<project name>-0.1\target\<project name>\META-INF\context.xml`
[DEBUG] (f) ignorePackaging = false
[DEBUG] (f) mode = war
[DEBUG] (f) packaging = war
[DEBUG] (f) path = /<project name>
[DEBUG] (f) update = false
[DEBUG] (f) url = http://localhost:8080/manager/html
[DEBUG] (f) version = 2.0
[DEBUG] (f) warFile = E:\workspace\<repo name>\branches\<Project name>-0.1\target\<project-name>.war
[DEBUG] -- end configuration --
[INFO] Deploying war to http://localhost:8080/<project name>
[DEBUG] No server specified for authentication - using defaults
Uploading: http://localhost:8080/manager/html/deploy?path=%2F<project name>
有了这个,它让我害怕:401 - 未经授权