如何将 war 文件添加到另一个 java Web 应用程序依赖项?
How can I add war file to another java web application dependencies?
我有 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>
...
如何使用 <groupId>org.itsme</groupId>
、<artifactId>spring3-mvc-maven-xml-hello-world</artifactId>
、<packaging>war</packaging>
和 <version>1.0-SNAPSHOT</version>
将 Web 应用程序的 war
添加到 project_b?
在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 文件视为类路径。
解决问题有两种方法:
创建一个Maven 模块,其中包含类 jar 打包的project-orange。现在您可以将新的 Maven 模块视为普通依赖项。
配置 maven-war-plugin,使其在构建 .war 文件时构建 .jar 文件。在您的 war 项目的节点下添加以下代码。下面是一个例子。
.
...
<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后,可以在目标文件夹中找到以下压缩包文件
- 项目-orange.war
- 项目-橙色-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/
最近我也遇到了同样的问题。我就是这样很简单的解决了。
第1步:在原项目的pom中(不依赖于任何项目)配置maven war插件,使其构建war 以及罐子。当我们执行 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>
第二步:在第二个项目(依赖第一个项目)中,将依赖jar(原始项目)放入pom中。
<dependency>
<groupId>com.pancharatna</groupId>
<artifactId>TestWebApp</artifactId>
<version>1.0-SNAPSHOT</version>
<scope>compile</scope>
</dependency>
第 3 步: 为项目执行 mvn clean install,然后为第二个项目执行 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>
我有 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>
...
如何使用 <groupId>org.itsme</groupId>
、<artifactId>spring3-mvc-maven-xml-hello-world</artifactId>
、<packaging>war</packaging>
和 <version>1.0-SNAPSHOT</version>
将 Web 应用程序的 war
添加到 project_b?
在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 文件视为类路径。
解决问题有两种方法:
创建一个Maven 模块,其中包含类 jar 打包的project-orange。现在您可以将新的 Maven 模块视为普通依赖项。
配置 maven-war-plugin,使其在构建 .war 文件时构建 .jar 文件。在您的 war 项目的节点下添加以下代码。下面是一个例子。
.
...
<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后,可以在目标文件夹中找到以下压缩包文件
- 项目-orange.war
- 项目-橙色-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/
最近我也遇到了同样的问题。我就是这样很简单的解决了。
第1步:在原项目的pom中(不依赖于任何项目)配置maven war插件,使其构建war 以及罐子。当我们执行 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>
第二步:在第二个项目(依赖第一个项目)中,将依赖jar(原始项目)放入pom中。
<dependency>
<groupId>com.pancharatna</groupId>
<artifactId>TestWebApp</artifactId>
<version>1.0-SNAPSHOT</version>
<scope>compile</scope>
</dependency>
第 3 步: 为项目执行 mvn clean install,然后为第二个项目执行 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>