1.问题与选择

Maven是一种非常通用的工具,其可用的公共存储库首屈一指。 但是,总会有一个不在任何地方托管的工件,或者托管该工件的存储库有依赖的风险,因为当您需要它时,它可能不会启动。 发生这种情况时,有几种选择:

  • 硬着头皮安装完整的版本库管理解决方案, 例如Nexus
  • 尝试将工件上传到更知名的公共存储库之一
  • 使用Maven插件在本地安装工件

Nexus当然是更成熟的解决方案,但也更复杂 。 设置一个实例来运行Nexus,设置Nexus本身,配置和维护它对于使用单个jar这样的简单问题来说可能是过大的。 但是,如果这种情况(托管自定义工件)很常见,那么存储库管理器就很有意义。

将工件直接上传到公共存储库或直接在Maven Central中也是一种很好的解决方案,但通常是一个漫长的解决方案。 另外,该库可能根本没有启用Maven,这使得处理过程变得更加困难,因此,现在就不能使用工件就不是一个现实的解决方案。 剩下的第三个选择是在源代码管理中添加工件,并使用maven插件。在这种情况下, maven-install-plugin可以在构建过程需要它之前在本地安装它 。 到目前为止,这是最简单,最可靠的选项。

2.使用

让我们从将工件安装到本地存储库所需的完整配置开始:

<plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-install-plugin</artifactId><version>2.4</version><configuration><groupId>org.somegroup</groupId><artifactId>someartifact</artifactId><version>1.0</version><packaging>jar</packaging><file>${basedir}/dependencies/someartifact-1.0.jar</file><generatePom>true</generatePom></configuration><executions><execution><id>install-jar-lib</id><goals><goal>install-file</goal></goals><phase>validate</phase></execution></executions>
</plugin>

现在,让我们分解并分析此配置的详细信息。

2.1。 工件信息

工件信息定义为<configuration>元素的一部分。 实际语法与声明依赖项非常相似– groupIdartifactIdversion元素。 配置的下一部分需要定义工件的包装 -指定为jar 。 接下来,我们需要使用Maven中提供属性提供要安装的实际jar文件的位置 -这可以是绝对文件路径,也可以是相对路径。 在这种情况下, $ {basedir}属性表示项目的根,即pom.xml文件所在的位置。 这意味着someartifact-1.0.jar文件需要放在根目录下的/ dependencies /目录中。 最后,还有一些其他可选详细信息也可以配置。

2.2。 行刑

安装文件目标的执行被绑定到标准Maven 构建生命周期中的验证阶段 。 这样一来,便可以在生命周期的开始就安装工件,而在下一个编译阶段才真正需要它。 一旦执行了编译阶段, 便会将我们的artartifact-1.0.jar正确安装在我们的本地存储库中,就像从Maven Central本身中检索到的任何其他工件一样。

2.3。 生成pom与提供pom

是否需要为工件提供pom.xml文件的问题主要取决于工件本身的运行时依赖性 。 简而言之,如果工件在其他jar上具有运行时相关性,则这些jar也将需要在运行时出现在类路径上。 使用简单的工件应该不会有问题,因为它在运行时可能没有依赖关系(依赖关系图中的叶子)。 安装文件目标中的generatePom选项应足以满足以下这些条件:

<generatePom>true</generatePom>

但是,如果工件更加复杂并且确实具有非平凡的依赖关系 ,那么,如果这些依赖关系尚未在类路径中,则必须添加它们。 一种方法是通过在项目的pom文件中手动定义这些新的依赖项。 更好的解决方案是提供一个自定义pom.xml文件以及已安装的工件:

<generatePom>false</generatePom>
<pomFile>${basedir}/dependencies/someartifact-1.0.pom</pomFile>

这将使Maven可以解析此自定义pom.xml中定义的工件的所有依赖关系,而不必在项目的主pom文件中手动定义它们。

3.结论

本文通过使用maven-install-plugin在本地安装jar,探讨了如何使用不在Maven项目中任何地方托管的jar。

参考:在baeldung博客上,从我们的JCG合作伙伴 Eugen Paraschiv 使用Maven安装本地jar 。

翻译自: https://www.javacodegeeks.com/2013/04/install-local-jar-with-maven.html

使用Maven安装本地jar相关推荐

  1. maven 安装本地jar_使用Maven安装本地jar

    maven 安装本地jar 1.问题与选择 Maven是一种非常通用的工具,其可用的公共存储库首屈一指. 但是,总会有一个不在任何地方托管的工件,或者托管该工件的存储库有依赖的风险,因为当您需要它时, ...

  2. 【Maven安装本地jar包】 Unknown lifecycle phase

    项目场景: 本地电脑Maven安装本地jar包,命令如下 mvn install:install-file -Dfile=D:\repository\com\genie\cloud\genie-com ...

  3. maven安装本地jar包到本地仓库

    !!!!一定要用纯文本粘贴到命令行 步骤1. 在命令行里运行: mvn install:install-file -Dfile=jar包的绝对位置 -DgroupId=pom文件依赖的groupId ...

  4. Maven命令安装本地jar包到本地仓库

    Maven命令安装本地jar包到本地仓库 原则上Maven工程pom.xml中依赖的jar包会自动实现从中央仓库下载到本地仓库. 但是碰上第三方开发的中央仓库没有的jar包,我们需要手动安装到本地ma ...

  5. Maven中安装本地Jar包到仓库中或将本地jar包上传

    摘要 maven install 本地jar 命令格式 mvn install:install-file -DgroupId=<group_name> -DartifactId=<a ...

  6. Maven引用本地jar并在打war包时引用jar

    文章目录 maven引入本地jar 方法一 方法二 maven引入本地jar 方法一 手动安装: mvn install:install-file -Dfile=jar包的位置 -DgroupId=p ...

  7. maven打本地JAR包

    本文来说下maven如何打本地JAR包 文章目录 概述 使用命令cmd 本文小结 概述 在跑一个程序的时候,发现项目报错了,无法从maven仓库中下载一个JAR包,上网查找资料之后,发现原来这是一个第 ...

  8. Maven引入本地jar包,解决打包时找不到本地jar包

    springboot,maven引入本地jar,生成pdf使用,找不到类问题 参考:Maven引入本地jar包,解决打包时找不到本地jar包 日志 Caused by: java.lang.NoCla ...

  9. 阿里云服务端SDK下载的jar包通过maven命令安装(maven手动安装本地jar包到项目)...

    有些jar包未开源,在maven中央仓库没有未开源的jar包,所以pom文件里不能自动联网下载,可以通过maven命令手动安装本地maven仓库中,手动安装不需要联网,前提是本地已经有要安装的jar包 ...

最新文章

  1. 解析Jquery取得iframe中元素的几种方法
  2. 调研:移动OA受热捧 企业更关注协同办公
  3. 卡在登陆界面进不去_穿越火线第十三年:需要的不仅仅是新界面,重要还是留住旧玩家...
  4. esp32 micropython spiffs_spiffs 文件系统在esp32中的应用
  5. python千人成像_Python实现千图成像:从图片爬取到图片合成
  6. 微服务 数据库耦合_mysql – 与其他服务共享的微服务数据库
  7. jquery.zclip轻量级复制失效问题
  8. JAVA中的编码分析
  9. 学习笔记--对最近学习的总结
  10. 运维工程师必备技能:网络排错思路讲解
  11. GIS案例练习-----------第二天
  12. 表或视图不存在 Hibernate Oracle
  13. PHP - 主流开发框架 - 介绍
  14. SQLSERVER去重
  15. 音视频又贵又卡还不够炫?云原生的华为云视频云服务带你重塑新体验
  16. tipask 3.5 出错get_class() expects parameter 1 to be object 解决方案及说明
  17. QT 图片背景色像素处理法
  18. 头牌知产介绍燃气灶商标注册类别属哪一类?
  19. c语言知道ascII码求字母,c语言的ascii代码
  20. surface和华为平板_微软的Surface Duo是手机和平板电脑的完美融合

热门文章

  1. 转:java网络编程-HTTP编程
  2. mysql体系结构和存储引擎
  3. MySQL的自然联结+外部联结(左外连接,右外连接)+内部联结
  4. 使用静态代理模式实现公用的报表导出功能
  5. eclipse创建神经网络_使用Eclipse Deeplearning4j构建简单的神经网络
  6. dynamodb java_使用Java扫描DynamoDB项目
  7. jdk8和hotspot_HotSpot的-XshowSettings标志的简单性和价值
  8. spring配置jndi_在Spring Framework中通过JNDI进行配置
  9. aws sqs_在Spring使用AWS SQS创建消息驱动Bean
  10. rest api 可选参数_可选类型API