`
winclass
  • 浏览: 2080 次
文章分类
社区版块
存档分类
最新评论

近期maven使用的一些记录

阅读更多

最近在将一个ant工程转化到maven

原始工程使用了OSGI,包括数个bundle工程,一个配置兼打包的工程,一个web工程。

运行时war包的lib内需要包括bundle的依赖。

使用run-jetty-run插件运行测试。ANT打包,打包过程主要流程:

  1. 编译,测试各bundle
  2. 复制配置文件
  3. 复制网站内容,加入外部资源
  4. 压缩js
  5. war,复制lib
  6. 最终结果结构:

tar--conf

      |-bundle--*.jar(bundles)

      |-war

          |-js

          |-WEB-INF

                    |-lib-*.jar(web的依赖,bundle的依赖)

原本的ANT打包也是很精巧的,还用到的自己扩展的Task等。

 

maven化的过程:

  1. 建立主工程,将每个项目作为module,主要为了方便版本管理,发布管理。
  2. bundle.jar这个比较简单,不赘述
  3. 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,显然也是不行的。
  4. 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创建项目 可以通过Maven的Archetype插件快速创建项目模板。具体步骤如下: 1. 执行`mvn archetype:generate`命令。 2. 按照提示输入项目的相关信息,包括`groupId`、`artifactId`等。 ### 配置Maven...

    maven工作使用的记录

    【标题】:“maven工作使用的记录” 在软件开发过程中,Maven是一个不可或缺的构建工具,尤其对于Java项目而言。它简化了项目的构建、管理和依赖管理流程。Maven使用一种标准化的项目对象模型(Project Object ...

    Maven 使用入门.pdf

    ### Maven 使用入门详解 #### Maven 介绍与优势 Maven 是一款流行的 Java 项目管理和构建工具,它通过一套标准化的方法来简化项目的构建过程。Maven 的核心价值在于它能够简化项目构建过程,使得开发者能够更加...

    maven项目学习笔记记录

    **Maven项目学习笔记记录** 在软件开发领域,Maven是一个强大的项目管理和构建工具,尤其在Java开发中广泛使用。本笔记将深入探讨Maven的核心概念、主要功能以及实际应用场景,帮助你更好地理解和掌握这一重要工具...

    使用Maven整合ssm

    通过以上步骤,我们可以成功地使用Maven构建并整合SSM框架,实现一个功能完善的Java Web应用。在整个过程中,Maven扮演了重要的角色,它管理了项目的所有依赖,简化了项目的构建和部署流程,使得SSM框架的集成变得...

    dockerfile-maven-plugin 配置记录

    dockerfile-maven-plugin 支持 maven 直接发布项目至 docker 镜像库

    maven3.6.1和3.6.3安装包

    Maven是Apache软件基金会开发的一个项目管理工具,它基于项目对象模型(Project Object Model,POM),通过使用预定义的构建生命周期和依赖管理系统,可以自动化构建过程。Maven的出现,替代了传统的Ant构建工具,...

    Maven3使用配置步骤

    ### Maven3 使用配置步骤详解 #### 一、下载Maven Maven是由Apache基金会支持的开源项目管理工具,主要用于Java项目的构建、依赖管理和项目信息管理。当前Maven的最新稳定版本为3.0.5。 - **下载Maven**: - ...

    maven3.0版本下载

    5. 其他文档和资源文件,如README和CHANGES,记录了版本变更和使用指南。 总的来说,Maven3.0是一个强大且成熟的构建工具,它的出现极大地推动了Java项目的标准化和自动化,而"apache-maven-3.0.5"这个压缩包正是...

    maven资源 apache-maven-3.3.9-bin.zip

    为了使用Maven,你需要将`bin`目录添加到系统PATH环境变量中,然后就可以在命令行中使用`mvn`命令执行各种Maven操作,如初始化新项目、构建项目、清理构建产物等。 总结起来,Apache Maven 3.3.9是一个强大的项目...

    maven3.8.5压缩包

    - **仓库**:Maven使用本地仓库存储下载的依赖项,并从远程仓库下载所需资源。默认的本地仓库路径通常是`~/.m2/repository`。 - **生命周期**:Maven有三个主要的生命周期阶段:clean(清理)、default(构建)和...

    java使用的maven包

    在Maven 3.5.2这个版本中,引入了一些重要的改进和修复。首先,它是对Maven 3.x系列的一个稳定更新,带来了性能优化和bug修复。例如,提高了构建速度,改进了对大型项目的支持,并且对插件管理和依赖解析进行了优化...

    Maven学习记录(一):安装与环境配置

    ** Maven学习记录(一):安装与环境配置 ** Maven是Java开发中不可或缺的构建工具,它通过统一的项目对象模型(Project Object Model,POM)管理项目的构建、报告和依赖关系,极大地简化了项目的构建流程。这篇...

    maven本地仓库

    初学者在学习Maven时,记录笔记是很有帮助的。这些笔记可能包括对Maven生命周期的理解、各种插件的使用、以及如何解决依赖冲突等问题。例如,了解`clean`、`compile`、`test`、`package`等阶段可以帮助理解Maven如何...

    maven仓库清理程序

    这个文件记录了Maven尝试获取该依赖的最新时间戳。如果网络不稳定或远程仓库出现问题,这些文件会保留下来,以便下次构建时Maven知道哪些依赖需要重新尝试下载。 2. **_remote.repositories文件**:这些文件包含了...

    apache-maven-3.2.2.zip

    Maven 3.2.2是Maven的一个特定版本,发布于2014年,它在前一版本的基础上进行了一些改进和优化,旨在提高开发效率和构建稳定性。 Maven的核心功能包括依赖管理和构建过程自动化。依赖管理允许开发者通过简单的配置...

    maven写的银行小系统简单的实现一些功能

    【标题】"maven写的银行小系统简单的实现一些功能"揭示了这个项目是使用Maven构建的一个小型银行系统,它涵盖了基本的银行业务操作。Maven是一个流行的Java项目管理工具,用于构建、依赖管理和项目信息管理。通过...

    在eclipse中不使用maven创建springboot工程所需jar包

    在不使用Maven的情况下,在Eclipse中创建Spring Boot工程,你需要手动管理依赖的jar包。以下是一些关于这些jar包及其在Spring Boot项目中的作用的关键知识点: 1. **jboss-logging-3.3.0.Final.jar**:这是一个日志...

    maven3.x全版本.zip

    6. **Maven 3.6.6**: 最新的 Maven 3.6.6 版本继续强化了性能和用户体验,提供了更好的日志记录和错误处理,支持更多的第三方存储库协议,同时改进了与 Git 等版本控制系统集成的能力。 ** Maven 的核心概念 ** 1....

    maven2的学习记录.docx

    下面是 Maven2 的一些基础知识点总结。 一、Maven2 项目结构 Maven2 项目结构主要分为以下几个部分: * 项目目录(Project Directory):包含项目的所有文件和目录。 * 源码目录(Source Directory):包含项目的...

Global site tag (gtag.js) - Google Analytics