1

誰かがmaven-war-pluginの構成を手伝ってくれませんか?

セキュリティ上の理由から、すべてのユーザーグループに1つだけをデプロイするのではなく、2つの異なるユーザーグループの2つのサーバーで2つの非常によく似たWebアプリを実行したいと思います。したがって、私はそれらの間で可能な限り多くのコードを共有したいと思います。

私は、開発のためにスタンドアロンで実行し、そのアイテムのほとんどを2つの別々のWebプロジェクトで再利用できる1つの戦争を作成することを意図していました。たとえば、Spring構成ファイル(applicationContext-XX.xml)、jspx、css、...、およびJavaコードを再利用したいと思います。ただし、共有クラスを拡張するJavaクラスもいくつか作成する必要があります。

spring rooによって生成されたテストプロジェクトを使用して、maven-war-pluginを試してみたかったのです。私はすでにいくつかのことを試しましたが、まだ展開に問題があります。

戦争のみを使用する場合、コードがコンパイルされないため、Javaクラスを拡張できません。

<dependency>
    <groupId>com.test.pizzashop</groupId>
    <artifactId>PizzaShopCommons_WEB</artifactId>
    <scope>compile</scope>
    <version>0.1.0.BUILD-SNAPSHOT</version>
    <type>war</type>
</dependency>
<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-war-plugin</artifactId>
    <version>2.2</version>
    <configuration>
        <overlays>
            <overlay>
                <groupId>com.test.pizzashop</groupId>
                <artifactId>PizzaShopCommons</artifactId>
            </overlay>
        </overlays>
    </configuration>
</plugin>

Javaクラスを拡張しなくても、libフォルダーに正しく存在するjarが見つからないため、Tomcat(mvn tomcat:run)が起動しません。
また、JavaクラスとSpring構成ファイル、およびすべての依存関係のみを含み、jarとしてパッケージ化されている2番目の共有プロジェクトを使用しようとしました。TomcatでメインのWebアプリを実行しても、例外が発生します
。org.springframework.beans.factory.BeanDefinitionStoreException:ServletContextリソース[/WEB-INF/spring/webmvc-config.xml]からXMLドキュメントを解析するIOException。ネストされた例外はFileNotFoundExceptionです:ServletContextリソースを開くことができませんでした[/WEB-INF/spring/webmvc-config.xml]このファイルwebmvc-config.xmlは、戦争の本来あるべき場所にあります(maven warプラグインによってコピーされます)。

<dependency>
    <groupId>com.test.pizzashop</groupId>
    <artifactId>PizzaShopCommons_WEB</artifactId>
    <scope>compile</scope>
    <version>0.1.0.BUILD-SNAPSHOT</version>
    <type>war</type>
</dependency>
<dependency>
    <groupId>com.test.pizzashop</groupId>
    <artifactId>PizzaShopCommons_SpringConf_Classes_Dependencies</artifactId>
    <scope>compile</scope>
    <version>0.0.1-SNAPSHOT</version>
    <type>jar</type>
</dependency>
<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-war-plugin</artifactId>
    <version>2.2</version>
    <configuration>
        <overlays>
            <overlay>
                <groupId>com.test.pizzashop</groupId>
                <artifactId>PizzaShopCommons_WEB</artifactId>
                <excludes>
                    <exclude>*.java</exclude>
                </excludes>
                <excludes>
                    <exclude>*.jar</exclude>
                </excludes>
            </overlay>
        </overlays>
    </configuration>
    <!-- <executions> <execution> <phase>generate-resources</phase> </execution> </executions> -->
</plugin>

生成された戦争のファイル構造は次のようになります。

+---pizzashop-1.0.0-BUILD-SNAPSHOT
|   +---images
|   |       add.png ...       
|   +---META-INF
|   |   |   MANIFEST.MF   
|   |   \---maven
|   |       \---com.test.pizzashop
|   |           \---PizzaShop
|   |                   pom.properties
|   |                   pom.xml                 
|   +---styles
|   |       standard.css ...   
|   \---WEB-INF
|       |   web.xml
|       +---classes
|       |   |   builddef.lst ...  
|       |   +---com
|       |   |   \---test
|       |   |       \---pizzashop   
|       |   |           +---domain
|       |   |           |       Pizza.class ...
|       |   |           +---service
|       |   |           |       PizzaService.class ...      
|       |   |           \---web
|       |   |                   PizzaController.class ...                  
|       |   \---META-INF
|       |       |   aop-ajc.xml
|       |       |   persistence.xml  
|       |       \---spring
|       |               applicationContext-security.xml
|       |               applicationContext.xml
|       |               database.properties             
|       +---i18n
|       |       application.properties ...    
|       +---layouts
|       |       default.jspx ...  
|       +---lib
|       |       antlr-2.7.6.jar ...      
|       +---spring
|       |   |   root-context.xml
|       |   |   webmvc-config.xml 
|       |   \---appServlet
|       |           xx_servlet-context_xx.xml         
|       +---tags
|       |   |   create.tagx ...        
|       \---views
|           |   dataAccessFailure.jspx ...

どうすればこれを実行できますか?1つの共有プロジェクト(1つのjarまたは戦争)だけでこれを達成する可能性はありますか?

4

1 に答える 1

2

Project Inheritance と Aggregation の両方が理にかなっているので、両方を統合しました。

フィードバックが得られることを願って、2つの問題を解決する方法を説明します(a)コモンズコードをwarとjarプロジェクトに分離し、b)Spring構成ファイルのために実行できない):

さらにいくつかのmavenオプションを試しましたが、満足のいく解決策が見つかりませんでした:

コモンズ コードから jar と war オーバーレイを直接作成するために、 attachClasses を含む構成要素をPizzaShopCommons_WEBの pom.xmlのmaven-war-pluginに追加しました。

 <plugin>
         <groupId>org.apache.maven.plugins</groupId>
         <artifactId>maven-war-plugin</artifactId>
         <version>2.1.1</version>
         <configuration>  
                <attachClasses>true</attachClasses>
         </configuration>   
 </plugin>

春のリソースの問題は、それらが 2 回 (jar から 1 回と war から 1 回) ロードされるようになったようです。これは、特に spring-security では機能しません。

そして、それは本質的に私の次の問題です。

私がすでに試したこととうまくいかないことは次
のとおりです。しかし、これにより、アプリケーションコンテキストファイルなしで戦争が構築されましたが、それらを含むjarが作成されました。Commons プロジェクトをスタンドアロンとして展開できなくなったため、これを実行しようとしませんでした。

 <packagingExcludes>**/applicationContext*</packagingExcludes> 

2. maven-jar-plugin をカスタマイズして、jar がビルドされた場合に機能するが、上記のような追加の jar を使用して war がビルドされた場合には機能しないクラス ファイルのみを含めます。

 <plugin>
         <groupId>org.apache.maven.plugins</groupId>
         <artifactId>maven-jar-plugin</artifactId>
         <version>2.3.1</version>
         <configuration>
           <includes>
            <include>com/**</include>
           </includes>
         </configuration>
  </plugin>

3.最終戦争から生成された jar を除外し、オーバーレイからクラス ファイルを使用します。でも私はまだ

私が得る例外: 実行中の変更に関係なく、何らかの理由で

mvn tomcat:実行

常に同じ例外が発生します。

DispatcherServlet - コンテキストの初期化に失敗しました ネストされた例外は java.io.FileNotFoundException: ServletContext リソース [/WEB-INF/spring/webmvc-config.xml] を開けませんでした

だから私はそれをTomcat 7に直接展開しようとしました。

「org.springframework.security.filterChainProxy」という名前の Bean の作成中にエラーが発生しました: init メソッドの呼び出しに失敗しました。ネストされた例外は java.lang.IllegalArgumentException: ユニバーサル マッチ パターン ('/**') がフィルタ チェーン内の他のパタ​​ーンの前に定義されているため、無視されます。名前空間または FilterChainProxy Bean 構成の順序を確認してください

Eclipse WTP を使用してコードをデプロイしても、オーバーレイされたアーティファクトが無視されるため、まったく機能しません。この場合のエラーメッセージは

org.springframework.beans.factory.NoSuchBeanDefinitionException: 「springSecurityFilterChain」という名前の Bean が定義されていません II 必要なコードを手動でコピーすると、Tomcat 7 に直接デプロイした場合と同じ例外が発生します。

Commons プロジェクトはいつでもデプロイでき、正しく動作します。Maven と Spring の経験が豊富な方からのアイデアは大歓迎です。

于 2012-08-27T16:55:15.743 に答える