`
xiao_2012_wei
  • 浏览: 30880 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
社区版块
存档分类
最新评论

分享使用maven过程中遇到的问题,以及解决方案

阅读更多
分享一点,使用maven过程中遇到的问题,以及解决方案。欢迎大家指教和补充。

背景:
         相信大多数开发人员都遇到过这个问题,如果lib下面存在两个jar包,那么启动server可能报错的。在本地开发环境,通常我们的做法,删除一个。
         先描述下,我们的工程里面lib下面的jar包哪来的呢?这个大家肯定不陌生,利用maven的插件,复制maven依赖的jar包到src/main/webapp/WEB-INF/lib下面。
其实这个是本地调试用,测试环境发布war包到tomcat,打出的war里面,其实是不需要执行该功能的。恰恰相反,如果执行了,还会出问题。请继续往下看……
         再来说下测试环境通过hudson或者jenkins编译打包的情况,其实和本地打出的war包是一样的,maven插件<artifactId>maven-war-plugin</artifactId>进行打包。这里特别之处就是snapshot版本的jar包。Snapshot即为快照版,是不稳定的jar版本,好处就在于jar包提供者修复bug等,重新提交jar包,不需要更改版本号,调用者就能从maven中获取最新的jar包。(注:版本号中的SNAPSHOT必须为大写)

         简单说下原理:maven会根据模块的版本号(pom文件中的version)中是否带有-SNAPSHOT来判断是快照版本还是正式版本。如果是快照版本,那么在mvn deploy时会自动发布到快照版本库中,而使用快照版本的模块,在不更改版本号的情况下,直接编译打包时,maven会自动从镜像服务器上下载最新的快照版本。maven都会将SNAPSHOT改成一个当前时间的timestamp,比如B-1.0-SNAPSHOT.jar到nexus中后,会成为这个样子:B-1.0-20081017-020325-13.jar。Maven在处理B的SNAPSHOT依赖时,会根据这样的timestamp下载最新的jar。

        所以如果在pom中再加上:
                                     <execution>
                                                        <id>copy-lib</id>
                                                        <phase>generate-resources</phase>
                                                        <goals>
                                                                 <goal>copy-dependencies</goal>
                                                        </goals>
                                                        <configuration>
                                                                 <outputDirectory>src/main/webapp/WEB-INF/lib</outputDirectory>
                                                        </configuration>
                                               </execution>
Snapshot版本的jar包在lib下面就会存在两个了。 哎呀,终于搞清楚原理了……

那么该如何处理呢? 
为了测试人员顺利编译、打包,最简单的做法就是,直接把上面这段plugin中的execution注掉,这样打出的war包,lib下面是看不到snapshot的jar,只有带时间戳的,即最新的jar包。但是开发人员怎么办? 本地环境必须要执行这个命令的,否则无法启动server的。傻办法就是 本地把注释打开,不要提交上去。 呵呵,我也经常这么玩,但是不是很容易忘记。有点不靠谱!
         那有没有靠谱的方法?
         把前面的execution注掉以后,然后在pom中project里面加入一段profiles:  不过也有前提,就是maven的settings文件必须是标准化的,主要是为了能识别开发环境。<!--复制依赖包到/WEB-INF/lib下  仅开发环境执行  -->
         <profiles>
                   <profile>
                            <id>dev</id>
                            <build>
                                     <plugins>
                                               <plugin>
                                                        <groupId>org.apache.maven.plugins</groupId>
                                                        <artifactId>maven-dependency-plugin</artifactId>
                                                        <version>${maven-dependency-plugin.version}</version>
                                                        <executions>
                                                                 <execution>
                                                                           <id>copy-lib</id>
                                                                           <phase>generate-resources</phase>
                                                                           <goals>
                                                                                    <goal>copy-dependencies</goal>
                                                                           </goals>
                                                                           <configuration>
                                                                                    <outputDirectory>src/main/webapp/WEB-INF/lib</outputDirectory>
                                                                           </configuration>
                                                                 </execution>
                                                        </executions>
                                               </plugin>
                                     </plugins>
                            </build>
                   </profile>
         </profiles>
0
1
分享到:
评论

相关推荐

    从Github检出Mina(maven)项目出现问题解决过程

    10. **博客链接中的具体问题**:虽然没有提供具体描述,但通常博主会在文章中详细描述遇到的问题及解决方案。访问给定的博客链接(https://donald-draper.iteye.com/blog/2375487)可以获取更详细的解决步骤。 综上...

    maven工作使用的记录

    通常,开发者会在博客中分享他们遇到的问题、解决方案,以及如何优化Maven构建过程的经验。例如,他们可能会讨论如何自定义Maven插件,如何设置Maven仓库,或者如何使用Maven的多模块项目结构来组织复杂的项目。 ...

    第一个实现的jbpm的例子以及遇到的问题解决方案

    【标题】"第一个实现的jbpm的例子以及遇到的问题解决方案" jbpm是一个开源的工作流管理系统,用于设计、执行和管理业务流程。本示例主要讲解如何从零开始搭建一个基于jbpm的简单工作流应用,并分享在实践中遇到的...

    使用GitHub搭建Maven私库

    #### 遇到的问题及解决方案 - **依赖失败**:有时可能会遇到依赖失败的情况,建议先清理本地Maven缓存(`mvn clean`),然后重新下载依赖。 - **JDK版本要求**:使用GitHub上传插件时,需要确保JDK版本为1.8及以上...

    maven-3.6.1-3.6.2-tips.rar

    本文将详细探讨Maven的两个具体版本——3.6.1和3.6.2,以及在使用过程中可能遇到的问题和解决方案。 一、Maven 3.6.1简介 Maven 3.6.1是Apache Maven项目发布的一个稳定版本,它在前一个版本的基础上进行了若干改进...

    idea创建基于maven的web工程共6页.pdf.zi

    12. 处理问题和调试:分享在使用Idea和Maven过程中可能遇到的问题及解决方案,如解决依赖冲突、处理编译错误等。 13. 实战演练:提供一个实际的案例,一步步演示创建、配置、运行和部署一个完整的基于Maven的Web...

    批量删除Maven 仓库未下载成功.lastupdate 的文件

    它还涉及到Maven的使用和仓库管理策略、批处理脚本的编写和命令行操作技巧,以及如何解决实际开发中遇到的问题。对于那些频繁使用Maven的Java开发者来说,这个话题提供了一个实用且有效的解决方案,帮助他们更加高效...

    千辛万苦弄出来 Maven+SSM框架整合项目

    这表明他们具备了解决复杂集成问题的能力,并能够分享自己的经验和解决方案。对于初学者来说,这是一个极好的学习资源,可以帮助他们快速理解和掌握Maven和SSM框架的整合技巧。 总之,Maven+SSM框架整合是Java开发...

    Maven实战.pdf

    - **实战技巧:** 分享了许多实际开发中遇到的问题及解决方案,增加了书籍的实用价值。 总结,《Maven实战》不仅是一本详细介绍Maven理论和实践的书籍,更是一部深入浅出、实战性强的技术手册。无论你是初学者还是...

    构建java的nexus私人仓库和maven的搭建分享.pdf

    总的来说,Maven和Nexus的结合使用为Java开发团队提供了高效、稳定且易于管理的依赖解决方案。通过在本地搭建Nexus仓库,可以显著提高开发效率,降低网络问题对构建的影响。同时,Eclipse中的Maven集成使得项目创建...

    编程报错/软硬件故障与解决方案

    - 将错误信息复制到搜索引擎中,可以找到其他开发者遇到并解决类似问题的经验分享。 - 这种方法对于快速定位问题非常有效,尤其是在面对一些较为罕见的错误时。 3. **检查代码或配置** - 根据错误信息,仔细检查...

    maven、spring mvc整合示例代码下载

    6. **README.md** - 提供了项目的简介、如何运行以及可能遇到的问题和解决方案。 通过分析这些文件,开发者可以了解到如何设置Maven项目,配置Spring MVC,编写控制器,定义模型,以及如何组织服务和数据访问层。...

    基于ssi框架的java代码生成器(maven插件)

    在ITEYE这样的技术社区,博主通常会详细介绍技术实现、使用场景、优势以及可能遇到的问题和解决方案。 从标签“源码”和“工具”我们可以推断,这个代码生成器可能包含可供下载和研究的源代码,并且是一个实用的...

    maven 私库 服务器 Nexus 3 安装包 支持 linux windows

    本文将详细介绍如何在 Linux 和 Windows 上安装 Nexus 3,并分享一些安装过程中可能遇到的问题及解决方案。 ### 一、Linux 系统上的安装 1. **下载 Nexus 3 安装包**: 首先从 Sonatype 官方网站获取 Nexus 3 的...

    安装broadleaf遇到的问题

    Broadleaf是一个基于Java的高级电子商务解决方案,它提供了丰富的功能,包括商品管理、订单处理、促销策略等。本篇文章将针对安装过程中可能遇到的问题进行详细探讨,并提供解决方法。 首先,安装 Broadleaf 通常...

    pom_xml报错“Missing artifact” - Change is constant___

    在IT行业中,我们经常遇到各种问题,其中之一就是“Missing artifact”错误,这通常发生在Maven项目中,当Maven尝试构建或编译项目时,它找不到依赖的JAR包或库。这个问题通常与`pom.xml`文件有关,它是Maven项目的...

    OptaPlanner中文使用手册

    - **模型规划存在的问题**:讨论了在规划模型设计过程中可能遇到的问题,如区分问题事实与规划实体、确定规划变量等。 - **使用Solver**:讲解了如何使用Solver接口来解决问题,包括如何设置解决策略、如何处理错误...

    ANT构建的一个问题

    标题中的“ANT构建的一个问题”指的是在使用Apache Ant工具进行软件构建时遇到的特定问题。Apache Ant是一个Java库和命令行工具,其任务是驱动构建过程。它通过XML定义的构建文件来描述构建步骤,使得开发者可以自动...

Global site tag (gtag.js) - Google Analytics