1

pre-integration-test フェーズで組み込み tomcat にアプリをデプロイしたいと考えています。

ただし、非常に特殊な要件があります。Mavenized ではない Web アプリケーションに依存しています。それを開発するための努力は私が余裕があるよりも大きいので、良い解決策は私の依存関係のために戦争を展開し、それから私のアプリケーション戦争を展開することだと思いました.

私のプラグイン構成は次のようになります。

    <plugin>
        <groupId>org.apache.tomcat.maven</groupId>
        <artifactId>tomcat7-maven-plugin</artifactId>
        <version>2.2</version>
        <configuration>
            <path>/spr</path>
            <url>http://localhost:8080/manager/text</url>
            <server>localServer</server>
            <additionalConfigFilesDir>${additionalFilePath}</additionalConfigFilesDir>
            <tomcatUsers>${somePath}/tomcat-users.xml</tomcatUsers>
            <fork>true</fork>
        </configuration>
        <executions>
            <execution>
                <id>start-portal</id>
                <phase>pre-integration-test</phase>
                <goals>
                    <goal>run-war</goal>
                </goals>
                <configuration>
                    <path>/</path>
                    <warDirectory>${my.dependency.war.path}</warDirectory>
                </configuration>
            </execution>
            <execution>
                <id>deploy-spr</id>
                <phase>pre-integration-test</phase>
                <goals>
                    <goal>deploy</goal>
                </goals>
                <configuration>
                    <path>/spr</path>
                </configuration>
            </execution>
            <execution>
                <id>stop-tomcat</id>
                <phase>post-integration-test</phase>
                <goals>
                    <goal>shutdown</goal>
                </goals>
            </execution>
        </executions>
    </plugin>

私の実行によってサーバーが正常に起動しstart-portal、依存関係が正しくデプロイされます。

問題は実行にありdeploy-sprます。エラーが発生し続けます:

[ERROR] Failed to execute goal org.apache.tomcat.maven:tomcat7-maven-plugin:2.2:deploy-only (deploy-spr) on project spr: Tomcat return http status error: 403, Reason Phrase: Forbidden: <html><head><title>Apache Tomcat/7.0.47 - Error report</title><style><!--H1 {font-family:Tahoma,Arial,sans-serif;color:white;background-color:#525D76;font-size:22px;} H2 {font-family:Tahoma,Arial,sans-serif;color:white;background-color:#525D76;font-size:16px;} H3 {font-family:Tahoma,Arial,sans-serif;color:white;background-color:#525D76;font-size:14px;} BODY {font-family:Tahoma,Arial,sans-serif;color:black;background-color:white;} B {font-family:Tahoma,Arial,sans-serif;color:white;background-color:#525D76;} P {font-family:Tahoma,Arial,sans-serif;background:white;color:black;font-size:12px;}A {color : black;}A.name {color : black;}HR {color : #525D76;}--></style> </head><body><h1>HTTP Status 403 - </h1><HR size="1" noshade="noshade"><p><b>type</b> Status report</p><p><b>message</b> <u></u></p><p><b>description</b> <u>Access to the specified resource has been forbidden.</u></p><HR size="1" noshade="noshade"><h3>Apache Tomcat/7.0.47</h3></body></html> -> [Help 1]

完全を期すために、私の settings.xml には次のものがあります。

<server>
  <id>localServer</id>
  <username>tomcatScript</username>
  <password>password</password>
</server>

そして、私の pom ファイルによって参照される tomcat-users.xml には次のものがあります。

<tomcat-users>

    <!-- Role to manage WAR files via HTML /manager. The name should be as is! -->
    <role rolename="manager-gui"/>
    <!-- Role to manage WAR files via script like Maven. The name should be as is! -->
    <role rolename="manager-script"/>

    <!-- One user cannot have manager-gui and manager-script roles -->
    <user username="tomcat" password="password" roles="manager-gui"/>
    <user username="tomcatScript" password="password" roles="manager-script"/>

</tomcat-users>

here で説明されているような、いくつかの同様のエラーが見つかりました。ただし、これらの投稿はすべてサーバーが既に実行されていると見なしているため、まったく同じではありません。

すでに実行中の tomcat にアプリケーションをデプロイするテストを行ったところ、動作しました。問題は、実際には maven が組み込みの tomcat を起動し、その組み込みの tomcat にデプロイすることです。

現時点では、次のような問題が考えられます。

  • pom.xml に指定されている tomcat-users.xml がなぜか正しく読み込まれていません。
  • maven は、統合前テスト段階で 2 つの実行をうまく処理していません (ただし、パッケージ段階でサーバーを強制的に起動しましたが、まだ機能しません)。

ちなみに、同じフェーズで 2 つの異なる実行でそれを行っている理由は、ほとんどの場合、start-portal2 つの Web アプリケーションを一度にデプロイするように構成できなかったためです (1 つは Maven アーティファクトから、もう 1 つは外部戦争から)。誰かがこれを行う方法を知っていれば、それは私にとっても許容できる修正です(ただし、この質問のタイトルとは実際には関係ありません)。webapps 構成プロパティは、外部戦争では機能しないようです。Maven アーティファクトだけです。

私は完全にアイデアがありません。誰かがこの問題に遭遇したことがありますか、またはこれを達成する方法を知っていますか?

ありがとう

4

1 に答える 1

1

私は問題を解決することができましたが、実際には非常に簡単です。

誰も答えなかったので、これが私がしたことです。両方のアプリをデプロイするための実行は 1 回だけです。

<execution>
 <id>start-portal</id>
     <goal>run-war</goal>
 </goals>
 <configuration>
     <path>/</path>
     <fork>true</fork>
     <warDirectory>${portal.war}</warDirectory>
     <additionalConfigFilesDir>${portal.properties}</additionalConfigFilesDir>
     <webapps>
         <webapp>
             <contextPath>/spr</contextPath>
         </webapp>
     </webapps>
 </configuration>
</execution>

webapps セクションでは、maven アーティファクトからデプロイするすべてのアプリを指定します (私の場合は 1 つしかなく、この pom が属するアプリなので省略できます)。

warDirectory で、外部の爆発した戦争を指定します。単一の外部 Web アプリケーションしか展開できないように見えるため、ここには制限があると思いますが、それで十分です。

于 2014-05-08T08:29:50.107 に答える