Maven - 依赖战争打开包装

时间:2016-12-20 07:42:56

标签: java maven java-ee war

我实现了一个通用模块,它是一个战争包,比如common_module.war。我需要在另一个测试应用程序中使用此common_module.war。在我的本地eclipse中,当我将common_module.war包含为测试应用程序的依赖项时,我可以访问所有jsps&测试应用程序中的common_module.war的java类。到目前为止一切都很好。

现在的问题是为了将它部署在服务器上。我将common_module.war上传到我公司的artifactory文件夹。并在存储库路径中包含该路径。现在测试应用程序无法访问common_module.war的jsps。

我在这里做错了什么?

错误是 - 我在测试应用程序中包含了常用模块的jsp。在那里我可以看到没有找到红色标记错误jsp。

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
  <groupId>test_group_id</groupId>
  <artifactId>test_artifact</artifactId>
  <version>0.0.1-SNAPSHOT</version>
  <packaging>war</packaging>
  <name>test</name>
  <description>test</description>
 <repositories>
        <repository>
            <id>central</id>
            <name>Maven Repository Switchboard</name>
            <layout>default</layout>
            <url>http://repo1.maven.org/maven2</url>
            <snapshots>
                <enabled>false</enabled>
            </snapshots>
        </repository>
        <repository>
            <id>my_company_name</id>
            <url>path_to_my_company_artifactory</url>
            <snapshots>
                <enabled>true</enabled>
            </snapshots>
            <releases>
                <enabled>true</enabled>
            </releases>
        </repository>
    </repositories>
    <dependencies>
    <dependency>
             <groupId>common_module_group_id</groupId>
                <artifactId>common_module_artifact</artifactId>
             <version>0.0.1-SNAPSHOT</version>
            <type>war</type>
      <scope>runtime</scope>
        </dependency>
        </dependencies>
    <plugins>

            <plugin>
                <artifactId>maven-war-plugin</artifactId>
                <version>2.3</version>
                <configuration>
                    <outputDirectory>${project.build.directory}/../package/dependencies/jbossews/webapps</outputDirectory>
                     <warSourceDirectory>/src/main/webapp</warSourceDirectory>
                      <webXml>src\main\webapp\WEB-INF\web.xml</webXml> 
                    <attachClasses>true</attachClasses>
                <classesClassifier>classes</classesClassifier>
                </configuration>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-assembly-plugin</artifactId>
                <version>2.4</version>
                <executions>
                    <execution>
                        <phase>package</phase>
                        <goals>
                            <goal>single</goal>
                        </goals>
                    </execution>
                </executions>
                <configuration>
                    <appendAssemblyId>false</appendAssemblyId>
                    <descriptors>
                        <descriptor>assembly.xml</descriptor>
                    </descriptors>
                </configuration>
            </plugin>
            <plugin>
            <artifactId>maven-compiler-plugin</artifactId>
            <version>2.3.2</version>
            <configuration>
                <source>1.7</source>
                <target>1.7</target>
            </configuration>
        </plugin>   
        </plugins>
</project>

2 个答案:

答案 0 :(得分:0)

在我看来,您正在尝试实施web-fragment。这是一个JAR文件(不是WAR文件),可以包含在Web应用程序的WEB-INF / lib目录中。它可能包含与WAR文件相同的组件,包括JSP;它的包装方式不同。

jar文件应包含META-INF/web-fragment.xml文件,JSP应打包在META-INF/resources目录中。 servlet容器将处理此目录中的JSP文件,就好像它们位于WAR文件的根目录中一样。 web-fragment.xml本质上是普通web.xml文件的一个子集。

这是Servlet 3.0+功能。

请参阅Java Servlet规范3.0 / 3.1的§8.2和§10.5。

答案 1 :(得分:0)

战争叠加功能帮我解决了这个问题。现在工作正常。