3

The idea is to have a self-containing project (well, at least for development) without any need to configure external tomcat - but the problem with using tomcat7-maven-plugin it that, correct me if I'm wrong, the embedded version of tomcat does not contain "manager" application - and I just don't want to rerun whole server each time.

So the question is, what is the best way to incorporate manager webapp to embedded tomcat?

4

2 に答える 2

6

Manager@olamyが彼のソリューションで提案しているように、私はうまくいきました。実行するにはまだかなりの作業が必要であり、私の解決策は彼のものとは多少異なります。これに関する情報はインターネット上ではまれであるため、どのように実行したかを詳しく説明します.

まず、これは私の WAR のプロジェクト構造です。

WAR構造イメージ

@olamy が提供したリンクからmanager.warファイルをダウンロードし、 .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.propertiesandcontext.xmlは省略できますが、 が機能するには、対応するタグでserver.xmlandを指定する必要があります。tomcat-users.xmlManager

したがって、これら 2 つのファイルの内容は次のとおりです。

サーバー.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/ deploy-war-project/src/main/tomcatconf/server.xml

秘訣は、privileged="true" を使用することです

HTH

于 2014-02-19T03:31:33.540 に答える