1

有人可以帮我配置 maven-war-plugin 吗?

出于安全原因,我想在两台服务器上为两个不同的用户组运行两个非常相似的 Web 应用程序,而不是只为所有用户组部署一个。因此,我想在他们之间共享尽可能多的代码。

我打算创建一场战争,它也可以独立运行以进行开发,并在两个单独的 Web 项目中重用其大部分项目。我想重用例如 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 类,我的 Tomcat (mvn tomcat:run) 也不会启动,因为它没有找到正确位于 lib 文件夹中的 jar。
我还尝试使用第二个共享项目,它只包含 Java 类和 Spring 配置文件以及所有依赖项,然后打包为 jar。在 Tomcat 中运行主 Web 应用程序仍然会导致异常:
org.springframework.beans.factory.BeanDefinitionStoreException: IOException parsing XML document from ServletContext resource [/WEB-INF/spring/webmvc-config.xml];嵌套异常是 FileNotFoundException:无法打开 ServletContext 资源 [/WEB-INF/spring/webmvc-config.xml] 这个文件 webmvc-config.xml 位于它应该在战争中的位置(由 maven 战争插件复制在那里)。

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

我怎样才能让它运行?是否有可能仅通过一个共享项目(一个罐子或战争)来实现这一目标?

4

1 回答 1

2

我集成了项目继承和聚合,因为两者都是有意义的。

希望能得到一些反馈,我将描述我如何尝试两个解决这两个问题(a)将公共代码分成一个战争和一个 jar 项目,b)由于 spring 配置文件而无法运行):

我尝试了一些更多的 Maven 选项,但仍然没有找到令人满意的解决方案:

我在 PizzaShopCommons_WEB 的 pom.xml 中的maven-war-plugin中添加了一个带有attachClasses的配置元素,以直接从 commons 代码创建一个 jar 和一个战争覆盖:

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

弹簧资源的问题似乎是现在它们被加载了两次(一次来自 jar,一次来自战争)。这尤其不适用于弹簧安全性。

这基本上是我的下一个问题。

我已经尝试过但不起作用的是:
1.在上面的配置中添加包装排除有问题的弹簧配置文件。但这导致在没有 applicationContext 文件但包含它们的 jars 的情况下构建战争。现在无法再将 commons 项目作为独立项目部署,所以我没有尝试运行它:

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

2.自定义 maven-jar-plugin 以仅包含在构建 jar 时有效的类文件,但在使用额外 jar 构建战争时不包含,如上所示。

 <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 - 上下文初始化失败 org.springframework.beans.factory.BeanDefinitionStoreException: IOException parsing XML document from ServletContext resource [/WEB-INF/spring/webmvc-config.xml]; 嵌套异常是 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 回答