最近在将一个ant工程转化到maven
原始工程使用了OSGI,包括数个bundle工程,一个配置兼打包的工程,一个web工程。
运行时war包的lib内需要包括bundle的依赖。
使用run-jetty-run插件运行测试。ANT打包,打包过程主要流程:
- 编译,测试各bundle
- 复制配置文件
- 复制网站内容,加入外部资源
- 压缩js
- war,复制lib
- 最终结果结构:
tar--conf
|-bundle--*.jar(bundles)
|-war
|-js
|-WEB-INF
|-lib-*.jar(web的依赖,bundle的依赖)
原本的ANT打包也是很精巧的,还用到的自己扩展的Task等。
maven化的过程:
- 建立主工程,将每个项目作为module,主要为了方便版本管理,发布管理。
- bundle.jar这个比较简单,不赘述
-
conf module:conf打包简单,使用assembly plugin;bundle:按说这里可以使用assembly plugin的ModuleSets,但是怎么试都有问题,只能在parent工程里使用package assemble:single才可以,在子工程内使用userAllProejcts都没用,总是说Fileter not fit 这样子。查了网上的资料,看了sonatype的best practice都推荐使用DependencySets,于是改了,又有个问题就是assembly plugin 不会查找local repository,在脱机的时候很不方便;又改为用dependency plugin copy文件,再用assembly FileSets打包;这里有一些细节要注意,因为希望的目录结构是zip内一个目录bundle,里面就是各种jar,所以要写成这样子:
<includeBaseDirectory>false</includeBaseDirectory> <fileSets> <fileSet> <directory>${project.build.directory}/bundle</directory> <includes> <include>*.*</include> </includes> <outputDirectory>bundle</outputDirectory> </fileSet> </fileSets>
includeBaseDirectory写成true目录会变成这样 moduleName-bundle-*.jar这样子;后面的directory也是需要这样写直接写成inclues 目录名/文件名会变成 bundle-target-bundle-*.jar,显然也是不行的。 -
web module:主要有以下问题:一个是lib打包的问题,除了web自己需要的jar以外,还有bundle的依赖,但不包括bundle本身。一开始想在conf module打包时用assembly copy 到lib,确实也是可以的,但在web单独package时就不对了;后来直接依赖conf(因为conf已经依赖了所有bundle,conf要设成jar,不能是POM,不然web要报错),然后在打包时filter。这里有一个细节:官方所说webappDirectory的默认值是${project.build.directory}/${project.build.finalName},确实没错,但只要设定了warSourceDirectory这个属性(因为我的web工程结构非标准,所以必须设),这个webappDirectory就会和warSourceDirectory是同一个目录,也就是打包目录=web开发目录,带来很多不便,如:打包时copy来的lib要在clean时删除(不然svn提交时很烦),web.xml无法更换(工程有开发用的web.xml,打包用的web.prod.xml,ant很容易处理,但是maven就悲剧鸟)等。设定了webappDirectory了以后war package前就有一个copy动作,很多处理可以简单搞定。还有一点warSourceExcludes和packagingExcludes之间的区别要注意,前者是web开发目录copy到web打包目录时所用(主要用于忽略web.xml吧),后者是web打包目录到war包时所用。
<plugin> <artifactId>maven-war-plugin</artifactId> <configuration> <warSourceDirectory>web</warSourceDirectory> <webXml>web/WEB-INF/web.prod.xml</webXml> <!--貌似设了warSourceDirectory以后一定要设这个--> <webappDirectory>${project.build.directory}/${project.build.finalName}</webappDirectory> <warSourceExcludes> WEB-INF/web.xml, WEB-INF/web.prod.xml </warSourceExcludes> <packagingExcludes> WEB-INF/lib/*.api-*.jar,WEB-INF/lib/*.impl-*.jar, WEB-INF/lib/core.*.jar,WEB-INF/lib/base.*.jar, WEB-INF/lib/sys.*.jar,WEB-INF/lib/rainbow*.jar, WEB-INF/lib/*servlet*.jar </packagingExcludes> </configuration> </plugin>
相关推荐
### 使用Maven创建项目 可以通过Maven的Archetype插件快速创建项目模板。具体步骤如下: 1. 执行`mvn archetype:generate`命令。 2. 按照提示输入项目的相关信息,包括`groupId`、`artifactId`等。 ### 配置Maven...
【标题】:“maven工作使用的记录” 在软件开发过程中,Maven是一个不可或缺的构建工具,尤其对于Java项目而言。它简化了项目的构建、管理和依赖管理流程。Maven使用一种标准化的项目对象模型(Project Object ...
### Maven 使用入门详解 #### Maven 介绍与优势 Maven 是一款流行的 Java 项目管理和构建工具,它通过一套标准化的方法来简化项目的构建过程。Maven 的核心价值在于它能够简化项目构建过程,使得开发者能够更加...
**Maven项目学习笔记记录** 在软件开发领域,Maven是一个强大的项目管理和构建工具,尤其在Java开发中广泛使用。本笔记将深入探讨Maven的核心概念、主要功能以及实际应用场景,帮助你更好地理解和掌握这一重要工具...
通过以上步骤,我们可以成功地使用Maven构建并整合SSM框架,实现一个功能完善的Java Web应用。在整个过程中,Maven扮演了重要的角色,它管理了项目的所有依赖,简化了项目的构建和部署流程,使得SSM框架的集成变得...
dockerfile-maven-plugin 支持 maven 直接发布项目至 docker 镜像库
Maven是Apache软件基金会开发的一个项目管理工具,它基于项目对象模型(Project Object Model,POM),通过使用预定义的构建生命周期和依赖管理系统,可以自动化构建过程。Maven的出现,替代了传统的Ant构建工具,...
### Maven3 使用配置步骤详解 #### 一、下载Maven Maven是由Apache基金会支持的开源项目管理工具,主要用于Java项目的构建、依赖管理和项目信息管理。当前Maven的最新稳定版本为3.0.5。 - **下载Maven**: - ...
5. 其他文档和资源文件,如README和CHANGES,记录了版本变更和使用指南。 总的来说,Maven3.0是一个强大且成熟的构建工具,它的出现极大地推动了Java项目的标准化和自动化,而"apache-maven-3.0.5"这个压缩包正是...
为了使用Maven,你需要将`bin`目录添加到系统PATH环境变量中,然后就可以在命令行中使用`mvn`命令执行各种Maven操作,如初始化新项目、构建项目、清理构建产物等。 总结起来,Apache Maven 3.3.9是一个强大的项目...
- **仓库**:Maven使用本地仓库存储下载的依赖项,并从远程仓库下载所需资源。默认的本地仓库路径通常是`~/.m2/repository`。 - **生命周期**:Maven有三个主要的生命周期阶段:clean(清理)、default(构建)和...
在Maven 3.5.2这个版本中,引入了一些重要的改进和修复。首先,它是对Maven 3.x系列的一个稳定更新,带来了性能优化和bug修复。例如,提高了构建速度,改进了对大型项目的支持,并且对插件管理和依赖解析进行了优化...
** Maven学习记录(一):安装与环境配置 ** Maven是Java开发中不可或缺的构建工具,它通过统一的项目对象模型(Project Object Model,POM)管理项目的构建、报告和依赖关系,极大地简化了项目的构建流程。这篇...
初学者在学习Maven时,记录笔记是很有帮助的。这些笔记可能包括对Maven生命周期的理解、各种插件的使用、以及如何解决依赖冲突等问题。例如,了解`clean`、`compile`、`test`、`package`等阶段可以帮助理解Maven如何...
这个文件记录了Maven尝试获取该依赖的最新时间戳。如果网络不稳定或远程仓库出现问题,这些文件会保留下来,以便下次构建时Maven知道哪些依赖需要重新尝试下载。 2. **_remote.repositories文件**:这些文件包含了...
6. **Maven 3.6.6**: 最新的 Maven 3.6.6 版本继续强化了性能和用户体验,提供了更好的日志记录和错误处理,支持更多的第三方存储库协议,同时改进了与 Git 等版本控制系统集成的能力。 ** Maven 的核心概念 ** 1....
Maven 3.2.2是Maven的一个特定版本,发布于2014年,它在前一版本的基础上进行了一些改进和优化,旨在提高开发效率和构建稳定性。 Maven的核心功能包括依赖管理和构建过程自动化。依赖管理允许开发者通过简单的配置...
【标题】"maven写的银行小系统简单的实现一些功能"揭示了这个项目是使用Maven构建的一个小型银行系统,它涵盖了基本的银行业务操作。Maven是一个流行的Java项目管理工具,用于构建、依赖管理和项目信息管理。通过...
在不使用Maven的情况下,在Eclipse中创建Spring Boot工程,你需要手动管理依赖的jar包。以下是一些关于这些jar包及其在Spring Boot项目中的作用的关键知识点: 1. **jboss-logging-3.3.0.Final.jar**:这是一个日志...
Maven 3.6在生命周期管理上更加智能,错误处理和日志记录也更加详尽。 **多模块项目**是大型Java项目常见结构,Maven通过聚合项目轻松管理这些模块。在3.6版本中,多模块项目的构建性能得到提升,尤其是在并行构建...