这个想法是有一个自包含的项目(好吧,至少对于开发)而不需要配置外部tomcat - 但使用tomcat7-maven-plugin的问题,如果我错了,请纠正我,嵌入式版本的tomcat不包含“manager”应用程序 - 我只是不想每次都重新运行整个服务器。
所以问题是,将经理webapp合并到嵌入式tomcat的最佳方法是什么?
答案 0 :(得分:6)
我得到了Manager
,正如@olamy在他的解决方案中建议的那样。因为它仍然需要一些工作才能让它运行起来,而且我的解决方案与他的解决方案有些不同,因为在互联网上很少有关于此的信息,我将详细说明我是如何做到的。
首先,这是我的WAR的项目结构:
我从@olamy提供的链接下载了manager.war文件,并将其放在WEB-INF
下的tomcat/manager
下。为方便起见,我将WAR文件留在那里,但您可以在提取其内容后将其删除,如上面的屏幕截图所示。您实际上可以随意将文件夹放在任何位置,只需确保在server.xml
更新文档库属性。
在pom.xml
内部我配置了tomcat7-maven-plugin
,如下所示:
<groupId>org.apache.tomcat.maven</groupId>
<artifactId>tomcat7-maven-plugin</artifactId>
<version>2.2</version>
<configuration>
<port>9090</port>
<path>/webapp</path>
<serverXml>./src/main/tomcat/conf/server.xml</serverXml>
<contextFile>./src/main/tomcat/conf/context.xml</contextFile>
<tomcatUsers>./src/main/tomcat/conf/tomcat-users.xml</tomcatUsers>
<tomcatLoggingFile>./src/main/tomcat/conf/logging.properties</tomcatLoggingFile>
<additionalConfigFilesDir>./src/main/tomcat/conf</additionalConfigFilesDir>
</configuration>
请注意,虽然additionalConfigFilesDir
告诉插件在哪里查找配置文件,并确保在服务器启动之前将文件复制到正确的文件夹,但如果没有,我无法正常工作明确提到相应标签中的单独配置文件。 logging.properties
和context.xml
可以省略,但server.xml
和tomcat-users.xml
必须在相应的标记中提及Manager
才能生效。
所以,这是这两个文件的内容:
<?xml version="1.0" encoding="UTF-8"?>
<Server port="9090" shutdown="SHUTDOWN">
<Listener className="org.apache.catalina.core.JreMemoryLeakPreventionListener"/>
<Listener className="org.apache.catalina.mbeans.GlobalResourcesLifecycleListener"/>
<Listener className="org.apache.catalina.core.ThreadLocalLeakPreventionListener"/>
<GlobalNamingResources>
<!-- Used by Manager -->
<Resource name="UserDatabase" auth="Container"
type="org.apache.catalina.UserDatabase"
description="User database that can be updated and saved"
factory="org.apache.catalina.users.MemoryUserDatabaseFactory"
pathname="conf/tomcat-users.xml" readonly="true"/>
</GlobalNamingResources>
<Service name="Catalina">
<Connector port="9090" keepAliveTimeout="1800000" maxKeepAliveRequests="30000" maxThreads="300"/>
<Engine name="Catalina" defaultHost="localhost">
<Valve className="org.apache.catalina.valves.AccessLogValve" resolveHosts="false" buffered="false"
pattern="%t-ip:%a-protocol::%H-status:%s-localPort:%p-path:%U-time:%D ms"/>
<Realm className="org.apache.catalina.realm.UserDatabaseRealm" resourceName="UserDatabase"/>
<Host name="localhost" appBase="webapps" autoDeploy="true" unpackWARs="true" deployXML="false">
<Context path="/manager" docBase="../../<your WAR root folder name>/WEB-INF/tomcat/manager" privileged="true"/>
</Host>
</Engine>
</Service>
</Server>
<?xml version="1.0" encoding="UTF-8"?>
<tomcat-users>
<role rolename="manager"/>
<role rolename="manager-gui"/>
<role rolename="manager-script"/>
<user username="admin" password="password" roles="manager, manager-gui, manager-script"/>
</tomcat-users>
使用mvn tomcat7:run-war
启动Tomcat 7后,我可以通过网址http://localhost:9090/manager和凭据Manager
/ admin
登录password
。
答案 1 :(得分:3)
您需要在此处找到manager.war:http://svn.apache.org/repos/asf/tomcat/maven-plugin/trunk/tomcat7-maven-plugin/src/test/manager.war
它实际上并没有在中央仓库中分发(所以可以随意在Maven仓库管理器中使用它)
然后检查此server.xml的内容以了解如何启用它: http://svn.apache.org/repos/asf/tomcat/maven-plugin/trunk/tomcat7-maven-plugin/src/test/resources/deploy-war-project/src/main/tomcatconf/server.xml
诀窍是使用privileged =“true”
HTH