使用Maven安装本地jar

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/368891.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

转:.NET面试题汇总(三)

原文地址&#xff1a;http://www.cnblogs.com/yuan-jun/p/6600692.html 1、简述 private、 protected、 public、 internal 修饰符的访问权限。private : 私有成员, 在类的内部才可以访问。protected : 保护成员&#xff0c;该类内部和继承类中可以访问。public : 公共成员&…

matlab 多文件编程,是否有可能在MATLAB中为每个文件定义多个函数,并从该文件外部访问它们?...

m文件(即主函数 )中的第一个函数在调用m文件时被调用。 主函数不需要与m文件具有相同的名称&#xff0c;但为了清晰起见&#xff0c;它应该是这样 。 当function和文件名称不同时&#xff0c;必须使用文件名称来调用主函数。m文件中的所有后续函数(称为本地函数 (或旧术语中的“…

简单的Gradle Web应用程序

Gradle通过“ war”和“ jetty”插件轻松支持Java Web应用程序。 本教程将向您展示如何快速创建一个简单的Java Servlet Web应用程序。 我们的基本项目结构将是&#xff1a; basic-websrcmainjavacomcodetutrHelloWorldServlet.javawebappWEB-INFweb.xml首先&#xff0c;创建一…

SD/MMC相关寄存器的介绍

1.SD卡内部架构 在熟悉SD/MMC相关寄存器之前&#xff0c;我们先来看看SD卡的内部架构是怎么样的&#xff0c;如下图所示&#xff1a; 2.SD/MMC相关寄存器的介绍 从上图中总结出&#xff1a;SD卡内部有7个寄存器. 一、OCR,CID,CSD和SCR寄存器保存卡的配置信息; 二、RCA寄存器保存…

【模板】OI常用模板(待补充)

//PS&#xff1a;最近修改日期&#xff1a;2017-11-07  20:41:44 首先感觉这种模板类的东西写了还是很有意义的&#xff0c;毕竟时不时的可以拿出来借鉴一下。 现在因为刚开始写这一类的东西&#xff0c;所以说还不是很详细&#xff0c;若有读者感觉可以补充&#xff0c;欢迎…

form中action属性后面?传递参数 获取不到

1 $p_id $_REQUEST[p_id]; 2 3 echo "<h1>您将更新商品编号为<span>$p_id</span>的商品信息 <a hreflistproduct.php>查看所有</a></h1> 4 <form actionupdateproduct.do.php?p_id$p_id methodget> 5 商品名称&#xff…

apche 禁止运行php,学习猿地-apache如何禁止执行php

apache禁止执行php的方法&#xff1a;首先新建一个“.htaccess”文件&#xff1b;然后复制代码内容“Order allow,deny”到“.htaccess”文件中&#xff1b;最后将该文件直接放到网站根目录里即可。apache禁止执行php的方法&#xff1a;第一种禁止上传目录运行php的方法如果你用…

Apache Camel 2.11发布

上周Apache Camel 2.11发布了。 这篇博客文章总结了最引人注目的新功能和改进。 有关详细说明&#xff0c;请参见Camel 2.11发行说明 。 1&#xff09;新组件 与往常一样&#xff0c;每个新发行版都包含许多新组件&#xff0c;这些组件由我们庞大的用户群贡献。 谢谢你们。 例…

linux分区满了,如何进行扩容

转自&#xff1a;https://blog.csdn.net/valage/article/details/73332147 图片中可以看到挂载点“/”的利用率移到100%&#xff0c;空间不够&#xff0c;所以要对其进行分区。 1. 先进入虚拟机设置里增大磁盘空间 注意&#xff1a;将25改成50&#xff0c;以扩大空间。这里…

RDA DEBUG

DEBUG寄存器&#xff1a;word 0xa0000010 word 0xa0000010 1  //debug开 word 0xa0000010 0  //debug关 当然也可以按模块打开/关闭debug信息&#xff0c;如 DBGCFG_KMF/DBGCFG_UMF/DBGCFG_MENU/DBGCFG_TUNER模块等。 所以大家在使用过程中要按源文件所在的模块加打印信息&…

DIV CSS布局-固定页面开度布局

DIV CSS布局中主要CSS属性介绍&#xff1a; Float: Float属性是DIV CSS布局中最基本也是最常用的属性&#xff0c;用于实现多列功能&#xff0c;我们知道<div>标签默认一行只能显示一个&#xff0c;而使用Float属性可以实现一行显示多个div的功能&#xff0c;最直接解释…

php获取网页js中的json,从php获取json数据使用js读取显示到网页笔记

//json与数组转换$array array("username" > "hellojson","age" > 23,"sex">"M");//定义php数组$resjson_encode($array);//var_dump($res);echo $res;//将结果输出到页面?>HTML代码$(function(){$(document)…

BZOJ.1023.[SHOI2008]cactus仙人掌图(DP)

题目链接 类似求树的直径&#xff0c;可以用(类似)树形DP求每个点其子树(在仙人掌上就是诱导子图)最长链、次长链&#xff0c;用每个点子节点不同子树的 max{最长链}max{次长链} 更新答案。(不需要存次长链&#xff0c;求解过程中先更新ans&#xff0c;然后再更新最长链即可) 设…

Spring Java配置

我发现许多我认识的Spring开发人员仍然不了解或使用Spring Java Configuration&#xff08;aka JavaConfig&#xff09;。 Spring 3.0引入了此功能&#xff0c;该功能使Spring可以完全用Java进行配置-不再需要XML&#xff01; 我真的很喜欢使用JavaConfig&#xff0c;因为&…

纯 CSS 实现波浪效果!

一直以来&#xff0c;使用纯 CSS 实现波浪效果都是十分困难的。 因为实现波浪的曲线需要借助贝塞尔曲线。 而使用纯 CSS 的方式&#xff0c;实现贝塞尔曲线&#xff0c;额&#xff0c;暂时是没有很好的方法。 当然&#xff0c;借助其他力量&#xff08;SVG、CANVAS&#xff09…

Mysql 数据库(三)

一、数值类型 1、整数类型&#xff1a;应用场景&#xff0c;存放年龄&#xff0c;等级&#xff0c;id或者各种号码等等 TINYINT&#xff1a;1个字节存放&#xff0c;有符号范围&#xff1a;-128到127&#xff0c;没有符号范围&#xff1a;0&#xff0c;255 。 SMALLINT&#xf…

Thonny -- 简洁的 python 轻量级 IDE

Thonny目前是 树莓派 上 默认的 Python 开发环境。 该 IDE 是 Institute of Computer Science of University of Tartu &#xff08;爱沙尼亚 的 塔尔图大学 计算机科学院&#xff09;开发的。 最近 yvivid 也体验了一下 Thonny 的开发环境&#xff0c;网站地址为 http://thonn…

如何造成内存泄漏

这将是一个相当邪恶的职位-当您确实希望使某人的生活陷入困境时&#xff0c;您将在谷歌上搜索。 在Java开发领域&#xff0c;内存泄漏只是您在这种情况下会引入的错误类型。 为您的受害者保证几天甚至几周的办公室不眠之夜。 我们将在这篇文章中描述两次泄漏。 两者都很容易理…

二维有限元方程matlab,有限元法求解二维Poisson方程的MATLAB实现

有限元法求解二维 Poisson 方程的 MATLAB 实现 陈 莲a &#xff0c;郭元辉b &#xff0c;邹叶童a ( 西华师范大学 a&#xff0e; 数学与信息学院; b&#xff0e; 教育信息技术中心&#xff0c;四川南充 6437009) 摘 要: 文章讨论了圆形区域上的三角形单元剖分、有限元空间&…

javascript 之异常处理try catch finally--05

语法结构 try catch finally是ECMAScript-262 第三版提供异常处理机制的标准&#xff0c;语法结构如下&#xff1a; 1 try{ 2 //可能会发生的错误代码 3 } 4 catch(error){ 5 //错误处理 6 }finally{ 7 //无论是否有异常都会执行 8 } 语法与大多数语言一样 如java .net&#x…