3

这个想法是拥有一个自包含项目(好吧,至少用于开发),而不需要配置外部 tomcat - 但是使用 tomcat7-maven-plugin 的问题是,如果我错了,请纠正我,嵌入式版本tomcat 不包含“管理器”应用程序-我只是不想每次都重新运行整个服务器。

所以问题是,将管理器 webapp 合并到嵌入式 tomcat 的最佳方法是什么?

4

2 回答 2

6

Manager按照@olamy 在他的解决方案中建议的方式完成了工作。由于要让它运行起来仍然需要做很多工作,而且我的解决方案与他的解决方案有些不同,而且由于互联网上关于这方面的信息很少,所以我将详细展示我是如何做到的。

首先,这是我的 WAR 的项目结构:

WAR结构图

我从@olamy 提供的链接下载了manager.warWEB-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.propertiesandcontext.xml可以省略,但server.xmlandtomcat-users.xml必须在其相应的标签中提及Manager才能起作用。

所以,这里是这两个文件的内容:

服务器.xml

<?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>

tomcat-users.xml

<?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>

启动 Tomcat 7 后,我可以通过 URL http://localhost:9090/manager和凭据/mvn tomcat7:run-war登录。Manageradminpassword

于 2015-04-22T14:40:19.713 回答
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/部署战争项目/src/main/tomcatconf/server.xml

诀窍是使用 privileged="true"

高温高压

于 2014-02-19T03:31:33.540 回答