最近在做项目中,用Maven管理项目间的依赖关系,遇到一个问题,快折腾死了,不过初步试出来一种解决方案。在此把问题及解决方案描述一下,以资共享。
问题描述:有两个项目A和B,Dynamic Web Project。依赖关系是,B-->A,一种方式是利用maven-war-plugin的Overlay机制(例子可参见官网),但这种解决方案默认是将两个Web应用的资源进行合并,相关的class都会被复制到WEB-INF/classes下面,相关的JSP等资源也合并到一起。我的要求是A的class被独立打包成一个jar,在发布到应用服务器后存在于B应用的WEB-INF/lib下面,A应用的其他资源都不要。
处理思路:
一、A应用的POM处理
<?xml version="1.0" encoding="UTF-8"?>
<project ......">
<modelVersion>4.0.0</modelVersion>
<groupId>com.xxx</groupId>
<version>0.0.1-SNAPSHOT</version>
<name>A-web</name>
<artifactId>A-web</artifactId>
<packaging>war</packaging>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-war-plugin</artifactId>
<configuration>
<!--注意增加这两行,在打包时相关的类会被独立打成jar-->
<attachClasses>true</attachClasses>
<classesClassifier>api</classesClassifier>
</configuration>
<version>2.3</version>
<executions>
</executions>
</plugin>
</plugins>
</build>
</project>
打包完成后,包含A-web.war和a-web-api.jar及其他文件。
二、B应用的POM处理
<?xml version="1.0" encoding="UTF-8"?>
<project ...........>
<modelVersion>4.0.0</modelVersion>
<groupId>com.xxx</groupId>
<version>0.0.1-SNAPSHOT</version>
<name>B</name>
<artifactId>B</artifactId>
<packaging>war</packaging>
<dependencies>
<dependency>
<groupId>com.xxx</groupId>
<artifactId>A-web</artifactId>
<version>0.0.1-SNAPSHOT</version>
<type>jar</type>
<scope>compile</scope>
<classifier>api</classifier>
</dependency>
</dependencies>
</project>
注意以上的依赖中的type属性为jar,而不是默认的war。classifier的值api与A中的classesClassifier的值api要一致。
三、运行环境
1、Eclipse4.2
2、Maven3.X
3、m2eclipse插件
分享到:
相关推荐
Maven是一个流行的构建管理和依赖管理工具,广泛应用于Java项目。在项目开发中,Maven的POM(Project Object Model)文件是核心配置文件,用于定义项目依赖、构建过程和其他元数据。然而,当多个项目或产品之间存在...
而Spring框架则是一个全面的企业级应用开发框架,提供了从数据访问到事务管理,再到Web应用的一系列解决方案。 在“maven+spring简单实例”中,我们主要探讨如何结合这两个强大的工具来创建一个简单的Java应用。...
SSH是一套强大的Java Web应用程序开发解决方案,可以帮助开发者快速构建高效、可维护的Web应用。 【Maven】 Maven是一个项目管理和综合工具,它通过读取项目配置信息(如pom.xml文件)来管理项目的构建、报告和文档...
Apache Maven 是一个强大的Java项目管理和综合工具,它...无论是小型项目还是大型企业级应用,Maven都能提供高效且可靠的解决方案。通过深入理解和熟练运用Maven,开发者可以更专注于编写代码,而不是担心构建问题。
要解决这个问题,需要在`pom.xml`中确保`<project>`下的`<packaging>`标签设置为`war`,并且在`<build>`的`<finalName>`指定正确的应用名。此外,检查`<build><plugins><plugin><groupId>org.apache.tomcat.maven...
总的来说,Apache Maven 3.6.0 提供了一整套解决方案来管理Java项目的构建、依赖和生命周期。通过正确配置 `settings.xml` 文件,开发者可以优化依赖库的下载,提高构建效率。同时,Maven的标准化和自动化特性使得...
Nexus是一款流行的Maven私服解决方案,它不仅可以作为Maven仓库,还可以支持其他类型的仓库,如npm、docker等。 #### Nexus私服环境搭建 搭建Nexus私服需要完成以下步骤: 1. 下载并安装Nexus服务。 2. 配置Nexus,...
本文将深入探讨这个问题的成因,并提供一系列的解决方案,帮助开发者顺利解决问题。 首先,我们要理解什么是WAR(Web ARchive)包。WAR文件是Java Web应用程序的标准打包格式,它包含了Servlet、JSP、静态资源以及...
总结,Maven 3.8.1作为一款强大的Java项目管理工具,提供了一整套解决方案,从项目的初始化到部署,大大简化了开发流程。了解并掌握Maven的使用,对于提升开发效率和团队协作至关重要。通过正确安装和配置Maven,你...
Maven是一款强大的项目管理和依赖管理工具,广泛应用于Java开发领域。在构建Web项目时,Maven能够自动化处理构建过程,包括编译、测试、打包、部署等步骤,极大地提高了开发效率。本示例将详细介绍如何使用Maven搭建...
本文将针对几个常见的Maven问题及其解决方法进行详细解析。 #### 问题1:依赖解析失败 **错误信息示例**: ``` [ERROR] Failed to execute goal on project biz_zhuhai: Could not resolve dependencies for ...
在J2EE环境中,应用通常被打包成WAR(Web Application Archive)文件,这是一个标准的Java Web应用归档格式,包含了运行在Web服务器上的所有资源,如HTML、CSS、JavaScript、Servlets、JSP等。 Maven是Apache组织...
综上所述,这个项目展示了如何利用Spring、Maven和sockjs在老版本浏览器中实现WebSocket通信,提供了一种高效、兼容的实时交互解决方案。对于开发者来说,理解和掌握这些技术对构建现代Web应用至关重要。
Maven通过POM(项目对象模型)来描述项目,POM是一个XML文件(通常命名为pom.xml),包含了项目的配置信息,包括项目依赖、构建过程、插件配置等。配置Maven环境需要下载Maven安装包并设置环境变量,如`MAVEN_HOME`...
3. **社区支持**: Maven有庞大的用户群体和丰富的插件生态系统,问题解决方案易于查找。 4. **跨平台**: Maven可在Windows、Linux、Mac OS等不同操作系统上运行。 通过理解Maven的核心概念和操作,开发者可以更...
Maven 3.5.2 作为Maven的一个稳定版本,为Java开发者提供了高效、可靠的项目管理和构建解决方案。通过规范化的项目结构和自动化处理,Maven极大地减少了构建和维护大型项目的工作量,是现代Java开发不可或缺的工具之...
Maven使用一种基于坐标(groupId、artifactId、version)的系统来管理这些依赖,使得开发者可以轻松地引用并下载所需的库。下面将详细介绍Maven本地仓库的工作原理、配置以及其在开发过程中的作用。 ### Maven仓库...
本实例将展示如何利用这三者来搭建一个完整的Web服务解决方案。 【描述】"cxf spring maven 实例 webservice"强调了这个示例的重点在于创建Web服务。Web服务是一种通过网络进行通信的应用程序,通常基于开放标准如...
在IT行业中,Maven是一个广泛使用的构建自动化工具,主要用于Java项目的构建、管理和依赖管理。它通过使用一个项目对象模型(Project Object Model,POM)来描述项目,并利用插件执行构建任务。MyEclipse是一款集成...