如何将商业第三方文物整合到您的Maven版本中
根据ZeroTurnaround的RebelLabs最近进行的一项调查 ,Maven仍然是领先的Java构建平台。 根据RebelLabs,当前的市场份额分布是:
- Maven的64%
- 蚂蚁+常春藤与16.5%
- 摇篮与11%
但是,与此同时,Maven经常因其晦涩和干扰性而受到批评。 与亚军Ant和Gradle相比,Maven在解释和自定义适应构建模型方面仅具有很小的灵活性。 就像Data Stax的Tim Berglund所说的那样:
但是,让我们开个玩笑,看看一个现实世界中的问题:
整合第三方商业物品
Maven Central并非免费提供您要依赖的所有第三方人工制品。 商业JDBC驱动程序或商业jOOQ版本就是这样的例子。 从本质上讲,有三种方法可以将这些伪像集成到您的构建中:
快速而肮脏
通常,对于小型测试项目或演示,您仅需要商业依赖。 您想确保它在运行时可以正常运行,而不必依赖于本地存储库设置或网络连接。 这是<scope>system</scope>
的好用例:
例如:jOOQ
<dependency><groupId>org.jooq</groupId><artifactId>jooq</artifactId><version>${jooq.version}</version><scope>system</scope><systemPath>${basedir}/lib/jooq-${jooq.version}.jar</systemPath>
</dependency>
例如:Microsoft SQL JDBC
<dependency><groupId>com.microsoft.sqlserver</groupId><artifactId>sqljdbc4</artifactId><version>3.0</version><scope>system</scope><systemPath>${basedir}/lib/sqljdbc4.jar</systemPath><!-- Notice that we can still put "optional"on commercial JDBC driver dependencies --><optional>true</optional>
</dependency>
这种方法的优点
当您要拥有一个本地的,自包含的模块,该模块可以保证在从源代码管理中检出后立即运行,而无需其他配置和设置,这确实是一个非常简单的解决方案。 当然,不要忘记先将库签入源代码管理。
这种方法的缺点
系统依赖项永远不会传递。 如果您的模块以这种方式依赖jOOQ,则模块的依赖项将看不到jOOQ API。
有关系统依赖性的详细信息,请参见Maven文档 。 从文档中引用:
与作用域系统的依赖关系始终可用,不会在存储库中查找。 它们通常用于告知Maven JDK或VM提供的依赖项。 因此,系统依赖关系对于解决JDK现在提供的工件的依赖关系特别有用,但以前可以单独下载获得。 典型示例是JDBC标准扩展或Java身份验证和授权服务(JAAS)。
更加坚固
一种看起来更健壮的方法是从版本控制系统中检查依赖项,然后“手动”将其导入本地存储库。 这将使它们可用于您自己的本地版本。 以下shell脚本显示了如何将jOOQ工件导入到本地存储库中
Windows批处理
@echo off
set VERSION=3.4.4if exist jOOQ-javadoc\jooq-%VERSION%-javadoc.jar (set JAVADOC_JOOQ=-Djavadoc=jOOQ-javadoc\jooq-%VERSION%-javadoc.jarset JAVADOC_JOOQ_META=-Djavadoc=jOOQ-javadoc\jooq-meta-%VERSION%-javadoc.jarset JAVADOC_JOOQ_CODEGEN=-Djavadoc=jOOQ-javadoc\jooq-codegen-%VERSION%-javadoc.jarset JAVADOC_JOOQ_CODEGEN_MAVEN=-Djavadoc=jOOQ-javadoc\jooq-codegen-maven-%VERSION%-javadoc.jarset JAVADOC_JOOQ_SCALA=-Djavadoc=jOOQ-javadoc\jooq-scala-%VERSION%-javadoc.jar
)if exist jOOQ-src\jooq-%VERSION%-sources.jar (set SOURCES_JOOQ=-Dsources=jOOQ-src\jooq-%VERSION%-sources.jarset SOURCES_JOOQ_META=-Dsources=jOOQ-src\jooq-meta-%VERSION%-sources.jarset SOURCES_JOOQ_CODEGEN=-Dsources=jOOQ-src\jooq-codegen-%VERSION%-sources.jarset SOURCES_JOOQ_CODEGEN_MAVEN=-Dsources=jOOQ-src\jooq-codegen-maven-%VERSION%-sources.jarset SOURCES_JOOQ_SCALA=-Dsources=jOOQ-src\jooq-scala-%VERSION%-sources.jar
)call mvn install:install-file -Dfile=jOOQ-pom\pom.xml -DgroupId=org.jooq -DartifactId=jooq-parent -Dversion=%VERSION% -Dpackaging=pom
call mvn install:install-file -Dfile=jOOQ-lib\jooq-%VERSION%.jar -DgroupId=org.jooq -DartifactId=jooq -Dversion=%VERSION% -Dpackaging=jar %JAVADOC_JOOQ% %SOURCES_JOOQ% -DpomFile=jOOQ-pom\jooq\pom.xml
call mvn install:install-file -Dfile=jOOQ-lib\jooq-meta-%VERSION%.jar -DgroupId=org.jooq -DartifactId=jooq-meta -Dversion=%VERSION% -Dpackaging=jar %JAVADOC_JOOQ_META% %SOURCES_JOOQ_META% -DpomFile=jOOQ-pom\jooq-meta\pom.xml
call mvn install:install-file -Dfile=jOOQ-lib\jooq-codegen-%VERSION%.jar -DgroupId=org.jooq -DartifactId=jooq-codegen -Dversion=%VERSION% -Dpackaging=jar %JAVADOC_JOOQ_CODEGEN% %SOURCES_JOOQ_CODEGEN% -DpomFile=jOOQ-pom\jooq-codegen\pom.xml
call mvn install:install-file -Dfile=jOOQ-lib\jooq-codegen-maven-%VERSION%.jar -DgroupId=org.jooq -DartifactId=jooq-codegen-maven -Dversion=%VERSION% -Dpackaging=jar %JAVADOC_JOOQ_CODEGEN_MAVEN% %SOURCES_JOOQ_CODEGEN_META% -DpomFile=jOOQ-pom\jooq-codegen-maven\pom.xml
call mvn install:install-file -Dfile=jOOQ-lib\jooq-scala-%VERSION%.jar -DgroupId=org.jooq -DartifactId=jooq-scala -Dversion=%VERSION% -Dpackaging=jar %JAVADOC_JOOQ_SCALA% %SOURCES_JOOQ_SCALA% -DpomFile=jOOQ-pom\jooq-scala\pom.xml
Linux Shell
#!/bin/sh
VERSION=3.4.4if [ -f jOOQ-javadoc/jooq-$VERSION-javadoc.jar ]; thenJAVADOC_JOOQ=-Djavadoc=jOOQ-javadoc/jooq-$VERSION-javadoc.jarJAVADOC_JOOQ_META=-Djavadoc=jOOQ-javadoc/jooq-meta-$VERSION-javadoc.jarJAVADOC_JOOQ_CODEGEN=-Djavadoc=jOOQ-javadoc/jooq-codegen-$VERSION-javadoc.jarJAVADOC_JOOQ_CODEGEN_MAVEN=-Djavadoc=jOOQ-javadoc/jooq-codegen-maven-$VERSION-javadoc.jarJAVADOC_JOOQ_SCALA=-Djavadoc=jOOQ-javadoc/jooq-scala-$VERSION-javadoc.jar
fiif [ -f jOOQ-src/jooq-$VERSION-sources.jar ]; thenSOURCES_JOOQ=-Dsources=jOOQ-src/jooq-$VERSION-sources.jarSOURCES_JOOQ_META=-Dsources=jOOQ-src/jooq-meta-$VERSION-sources.jarSOURCES_JOOQ_CODEGEN=-Dsources=jOOQ-src/jooq-codegen-$VERSION-sources.jarSOURCES_JOOQ_CODEGEN_MAVEN=-Dsources=jOOQ-src/jooq-codegen-maven-$VERSION-sources.jarSOURCES_JOOQ_SCALA=-Dsources=jOOQ-src/jooq-scala-$VERSION-sources.jar
fimvn install:install-file -Dfile=jOOQ-pom/pom.xml -DgroupId=org.jooq -DartifactId=jooq-parent -Dversion=$VERSION -Dpackaging=pom
mvn install:install-file -Dfile=jOOQ-lib/jooq-$VERSION.jar -DgroupId=org.jooq -DartifactId=jooq -Dversion=$VERSION -Dpackaging=jar $JAVADOC_JOOQ $SOURCES_JOOQ -DpomFile=jOOQ-pom/jooq/pom.xml
mvn install:install-file -Dfile=jOOQ-lib/jooq-meta-$VERSION.jar -DgroupId=org.jooq -DartifactId=jooq-meta -Dversion=$VERSION -Dpackaging=jar $JAVADOC_JOOQ_META $SOURCES_JOOQ_META -DpomFile=jOOQ-pom/jooq-meta/pom.xml
mvn install:install-file -Dfile=jOOQ-lib/jooq-codegen-$VERSION.jar -DgroupId=org.jooq -DartifactId=jooq-codegen -Dversion=$VERSION -Dpackaging=jar $JAVADOC_JOOQ_CODEGEN $SOURCES_JOOQ_CODEGEN -DpomFile=jOOQ-pom/jooq-codegen/pom.xml
mvn install:install-file -Dfile=jOOQ-lib/jooq-codegen-maven-$VERSION.jar -DgroupId=org.jooq -DartifactId=jooq-codegen-maven -Dversion=$VERSION -Dpackaging=jar $JAVADOC_JOOQ_CODEGEN_MAVEN $SOURCES_JOOQ_CODEGEN_META -DpomFile=jOOQ-pom/jooq-codegen-maven/pom.xml
mvn install:install-file -Dfile=jOOQ-lib/jooq-scala-$VERSION.jar -DgroupId=org.jooq -DartifactId=jooq-scala -Dversion=$VERSION -Dpackaging=jar $JAVADOC_JOOQ_SCALA $SOURCES_JOOQ_SCALA -DpomFile=jOOQ-pom/jooq-scala/pom.xml
上面的脚本实际上检查发行版中是否有Javadoc,Sources和/或Binaries,然后安装:
- 父pom.xml
- 各种工件二进制文件,源文件,javadocs和pom.xml文件
这种方法的优点
现在可以像引用任何其他类型的依赖项一样引用依赖项,因为人工制品已在本地存储库中注册。 而且,它们还可以传递给模块自己的依赖项,这些依赖关系可以传递-这可能是您在使用jOOQ时想要的。 然后,您将指定相关性:
<dependency><groupId>org.jooq</groupId><artifactId>jooq</artifactId><version>${jooq.version}</version>
</dependency><dependency><groupId>com.microsoft.sqlserver</groupId><artifactId>sqljdbc4</artifactId><version>3.0</version><scope>provided</scope>
</dependency>
这种方法的缺点
依赖项的安装涉及一个手动步骤。 如果您没有上述脚本,那么准确地找出如何逐步将所有这些依赖项导入到存储库中可能会很繁琐。 特别是,如果您正在运行演示或原型,则可能在最坏的情况下导致意外的编译失败。
要走的路
显然,在实际的项目设置中,以上两种方法都不足够,并且您可能会将这些库导入本地Nexus或Bintray或使用的任何存储库中。 只是要注意商业交付物可能对分销的潜在限制。
在此处可以找到有关如何将人工制品安装到Nexus的小教程 。
翻译自: https://www.javacodegeeks.com/2014/12/how-to-integrate-commercial-third-party-artefacts-into-your-maven-build.html
如何将商业第三方文物整合到您的Maven版本中相关推荐
- maven将第三方依赖_如何将商业第三方文物整合到您的Maven版本中
maven将第三方依赖 根据ZeroTurnaround的RebelLabs最近进行的一项调查 ,Maven仍然是领先的Java构建平台. 根据RebelLabs,当前的市场份额分布是: Maven的 ...
- 第三方服务整合-阿里云OSS上传文件-填坑
目录 如下,引入aliyun-oss失败: 原因: 解决方法 OssController 如下,引入aliyun-oss失败: com.alibaba.cloud:aliyun-oss-spring- ...
- python第三方库无法下载_无法使用从PyCharm中下载的第三方库
我正在开发一个脚本,它将使用Basemap库将数据绘制到地图上.我正在尝试导入Shapely,以便在同一个脚本中使用.我在Windows7环境中为Python2.7使用Anaconda2.我用cond ...
- Java基础-Eclipse第三方安装包管理工具之Maven
Java基础-Eclipse第三方安装包管理工具之Maven 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 玩过Linux的小伙伴应该都知道yum吧,我们只要把搭建好的yum仓库配 ...
- 分布式系统:SrpingBoot整合Zookeeper和Dubbo的版本匹配问题
QUESTION:SrpingBoot整合Zookeeper和Dubbo的版本匹配问题解决? ANSWER: 历史版本 如果您现在使用的Dubbo版本低于2.7.0,请使用如下对应版本的Dubbo S ...
- 在maven项目中解决第三方jar包依赖的问题
在maven项目中解决第三方jar包依赖的问题 参考文章: (1)在maven项目中解决第三方jar包依赖的问题 (2)https://www.cnblogs.com/nuccch/p/6122938 ...
- maven 项目中引入第三方jar包的方法
说明:这里说的第三方jar包是指maven库中没有改jar包,但是你的项目是maven项目,需要引入该jar包 1 将jar包放入项目的libs(我的路径是/Users/ma/workspace/bi ...
- 调用支付宝第三方接口(沙箱环境) Spring Boot+Maven
调用支付宝第三方接口(沙箱环境) Spring Boot+Maven 一.蚂蚁金服开放平台的操作 网址:https://open.alipay.com/platform/home.htm 支付宝扫码登 ...
- Java对接第三方支付渠道之微信支付APIV3版本
提示:微信支付APIV3版本对接流程梳理,目前微信支付提供APIV3和APIV2两个版本,简而言之,V3版本的安全性比V2更高. Java对接第三方支付渠道之微信支付APIV3版本 一.接入指引 1. ...
最新文章
- java开发用amd处理器_HBase1.x实战:协处理器Java开发实例--ObserverCoprocessor
- opensuse download
- 项目开发之git配置
- Mining Precision Interface From Query Logs -- 学习笔记(三)
- m3u8 php防盗链代码,Nginx-accesskey权限模块使用——简单的m3u8防盗链
- java biginteger 比较大小,java – 打印非常大的BigIntegers
- 微信小程序云数据库带换行的文本保存和获取
- bootstrap3的 progress 进度条
- windwos下ffmpeg的安装
- HTML5 dataset遍历,H5中data-xxxx属性
- mysql视图 外键_Mysql之视图、索引、外键、触发器、事务
- 绿云酒店管理系统 服务器要求,绿云宾馆管理软件-系统基础.doc
- [转]虚拟化系列-Windows server 2012 Remote桌面与应用
- web测试----死链检查(Xenu)
- 学习关于Bootstrap的感悟和体会
- for循环里面的break;和continue;语句
- layer icon图标汇总
- Vue前端项目部署在tomcat
- matlab atem(),ATEM-Ⅱ瞬变电磁仪数据处理软件的研制与应用
- mysql 怎么存经纬度_mysql存储地图经纬度的表怎么设计?
热门文章
- 2020蓝桥杯省赛---java---A---4(七段码)
- 2020蓝桥杯省赛---java---B---4( 合并检测)
- sam+matlab,Sam版Matlab粒子群PSO工具已经更新
- mysql级联复制转换成一主两从_一主两从转级联复制
- python实现倒n字形排列_Leetcode问题库——Z形变换(Python),补充X形变换,字形
- (转) SpringBoot接入两套kafka集群
- JDK7的日期时间类
- api restful_HATEOAS的RESTful服务。 记录超媒体API
- gradle项目 构建_使用Gradle构建Monorepo项目
- apache.camel_Apache Camel 2.20发布–新增功能