【问题标题】:How can I add war file to another java web application dependencies?如何将 war 文件添加到另一个 java web 应用程序依赖项?
【发布时间】:2015-09-10 06:30:02
【问题描述】:

我有 web maven 项目。项目的输出是一个war 文件。我想将此 war 文件添加为 project_b 的依赖项。
project_b的pom.xml文件,有一个插件如下:

...
<plugin>
    <inherited>true</inherited>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-war-plugin</artifactId>
    <version>2.3</version>
    <configuration>
        <warName>geoserver</warName>
        <webappDirectory>${project.build.directory}/geoserver</webappDirectory>
        <packagingExcludes>WEB-INF/lib/servlet-api*.jar</packagingExcludes>
        <archive>
            <manifest>
                <addDefaultImplementationEntries>true</addDefaultImplementationEntries>
                <addDefaultSpecificationEntries>true</addDefaultSpecificationEntries>
            </manifest>
            <manifestEntries>
                <GeoServerModule>core</GeoServerModule>
                <Application-Name>${project.build.finalname}</Application-Name>
                <Project-Version>${project.version}</Project-Version>
                <Iteration-Name>${iteration}</Iteration-Name>
                <Build-Timestamp>${maven.build.timestamp}</Build-Timestamp>
                <Git-Revision>${build.commit.id}</Git-Revision>
            </manifestEntries>
        </archive>
    </configuration>
    <executions>
        <execution>
            <phase>package</phase>
            <goals>
                <goal>war</goal>
            </goals>
        </execution>
    </executions>
</plugin>
...

如何使用&lt;groupId&gt;org.itsme&lt;/groupId&gt;&lt;artifactId&gt;spring3-mvc-maven-xml-hello-world&lt;/artifactId&gt;&lt;packaging&gt;war&lt;/packaging&gt;&lt;version&gt;1.0-SNAPSHOT&lt;/version&gt; 将Web 应用程序的war 添加到project_b?

【问题讨论】:

标签: java web-applications maven-plugin


【解决方案1】:

在 Maven 中,添加依赖只是小菜一碟。看看下面的 pom.xml。

<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/maven-v4_0_0.xsd"
>
    <modelVersion>4.0.0</modelVersion>

    <!-- Project Details -->
    <groupId>ykyuen</groupId>
    <artifactId>project-apple</artifactId>
    <packaging>jar</packaging>
    <version>1.0</version>
    <name>project-apple</name>

    <dependencies>
        <!-- project-apple depends on project-banana -->
        <dependency>
            <groupId>ykyuen</groupId>
            <artifactId>project-banana</artifactId>
            <version>1.0</version>
        </dependency>
    </dependencies>
</project>

设置上述依赖与在project-apple中导入project-banana.jar一样。

现在我有另一个名为 project-orange 的 Maven Web 应用程序项目,其包装类型等于 war。添加上述依赖链接根本不起作用,因为 Java 不将 .war 文件视为类路径。

解决问题有两种方法:

  1. 创建一个 Maven 模块,其中包含带有 jar 包的 project-orange 类。现在您可以将新的 Maven 模块视为正常依赖项。

  2. 配置 maven-war-plugin 以便在构建 .war 文件时构建 .jar 文件。在您的战争项目的节点下添加以下代码。下面是一个例子。

.

...
<build>
    <plugins>
        <plugin>
            <artifactId>maven-war-plugin</artifactId>
            <version>2.1.1</version>
            <configuration>
                <attachClasses>true</attachClasses>
                <classesClassifier>classes</classesClassifier>
            </configuration>
        </plugin>
    </plugins>
</build>
...

运行 mvn install 后,可以在目标文件夹中找到以下归档文件

  • project-orange.war
  • project-orange-classes.jar

现在您可以编辑 project-apple 的 pom.xml 以添加新的依赖项。

<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/maven-v4_0_0.xsd"
>
    <modelVersion>4.0.0</modelVersion>

    <!-- Project Details -->
    <groupId>ykyuen</groupId>
    <artifactId>project-apple</artifactId>
    <packaging>jar</packaging>
    <version>1.0</version>
    <name>project-apple</name>

    <dependencies>
        <!-- project-apple depends on project-banana -->
        <dependency>
            <groupId>ykyuen</groupId>
            <artifactId>project-banana</artifactId>
            <version>1.0</version>
        </dependency>
        <!-- project-apple depends on project-orange -->
        <dependency>
            <groupId>ykyuen</groupId>
            <artifactId>project-orange</artifactId>
            <version>1.0</version>
            <!-- To map the project-orange-classes.jar -->
            <classifier>classes</classifier>
        </dependency>
    </dependencies>
</project>

参考http://eureka.ykyuen.info/2009/10/30/maven-dependency-on-jarwar-package/

【讨论】:

    【解决方案2】:

    最近,我也面临同样的问题。这就是我非常简单地解决它的方法。

    第一步:在原项目的pom中(不依赖于任何项目)配置maven war插件,使其既能构建war,也能构建jar。当我们执行 mvn clean install 时,jar 将被上传到 maven 存储库中。

    我的 pom 的第一部分是这样的:

    <modelVersion>4.0.0</modelVersion>
    <groupId>com.pancharatna</groupId>
    <artifactId>TestWebApp</artifactId>
    **<packaging>jar</packaging>**
    <version>1.0-SNAPSHOT</version>
    

    接下来,在构建部分添加另一个插件:

    <build>
        <finalName>TestWebApp</finalName>
        <plugins>
            **<plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-war-plugin</artifactId>
                <executions>
                    <execution>
                        <id>make-a-war</id>
                        <phase>compile</phase>
                        <goals>
                            <goal>war</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>**
    
            <plugin>
                <artifactId>maven-compiler-plugin</artifactId>
                <configuration>
                    <source>1.6</source>
                    <target>1.6</target>
                </configuration>
            </plugin>
    
        </plugins>
    </build>
    

    第2步:在第二个项目(依赖于第一个项目)中,将依赖jar(原始项目)放入pom中。

       <dependency>
            <groupId>com.pancharatna</groupId>
            <artifactId>TestWebApp</artifactId>
            <version>1.0-SNAPSHOT</version>
            <scope>compile</scope>
        </dependency>
    

    第 3 步:为项目执行 mvn clean install,然后为第二个项目执行安装

    第 4 步: 可选:我们可以创建一个父 pom.xml,而不是像第 3 步中提到的那样按顺序和单独构建项目。 我们可以简单地运行 mvn clean install。:

    C:/Test/
            ├───Project1
            │   └───src/main/...
            │   └───pom.xml
            │
            ├───Project2
            │   └───src/main/...
            │   └───pom.xml
            │
            ├───pom.xml   <!-- parent pom -->
    
    <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/maven-v4_0_0.xsd">
        <modelVersion>4.0.0</modelVersion>
        <groupId>com.MyApp</groupId>
        <artifactId>myproject</artifactId>
        <packaging>pom</packaging>
        <version>1.0-SNAPSHOT</version>
        <name>myproject</name>
        <url>http://maven.apache.org</url>
        </dependencies>
        <modules>
            <module>/Project1</module>
            <module>/Project2</module>
        </modules>
    </project>
    

    【讨论】:

    • 如何使用 gradle 实现这一点?
    猜你喜欢
    • 2016-06-24
    • 2018-07-22
    • 2019-07-21
    • 2014-04-23
    • 2011-12-02
    • 1970-01-01
    • 2012-06-30
    • 1970-01-01
    • 2015-09-07
    相关资源
    最近更新 更多