如何将商业第三方文物整合到您的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

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

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

相关文章

2012年4月18日 新的开始

博客原本写在 http://50.17.193.116/但是由于没有域名的关系,不能被大多的搜索引擎给搜索到,为了能更大的分享我个人的一部分学习经验,将我的blog同时在博客园同步更新. 今天将开始书写自己的Blog&#xff0c;感谢师太提供了50.17.193.116这样一个还行&#xff0c;能将就用用的…

Membership学习(三)Membership Providers介绍[xgluxv]

本来想在第三篇文章里介绍一下 Membership的类的&#xff0c;不过现在中文msdn也出来了&#xff0c;所以就不写了&#xff0c;&#xff0c;直接到介绍Membership Providers。 Membership Providers提供了Membership数据源和服务之间的所有接口&#xff0c;在Asp.net2.0中…

为什么要保持软件包依赖项自由循环的五个原因

如果您很不幸不能在一个项目中与我一起工作&#xff0c;那么您将遭受所有软件包依赖项必须无循环的规则的困扰。 我不仅需要这样做 &#xff0c;而且还将创建一个单元测试&#xff0c;以确保使用Degraph进行测试。 这就是我认为无周期封装结构对项目有益的原因。 有用的抽象 &…

Servlet技术

----Servlet是用Java语言编写的应用到Web服务器端的扩展技术&#xff0c;它先于jsp产生&#xff0c;可以方便地对Web应用中的HTTP请求进行处理。在Java Web程序开发中&#xff0c;Servlet主要用于处理各种业务逻辑&#xff0c;他比jsp更具有业务逻辑层的意义。 一。Servlet基础…

Mysql远程登录及常用命令

第一招&#xff1a;mysql服务的启动和停止 启动&#xff1a;net start mysql 停止&#xff1a;net stop mysql 第二招&#xff1a;登陆mysql 语法如下&#xff1a;mysql -u用户名 -p用密码 键入命令mysql -uroot -p&#xff0c;回车后提示你输入密码&#xff0c;输入12345&…

基于Spring Boot的WebSocket应用程序并捕获HTTP会话ID

我最近参与了一个项目&#xff0c;我们需要捕获Websocket请求的http会话ID –原因是要确定使用相同基础HTTP会话的Websocket会话的数量。 这样做的方法基于利用新的spring-session模块的示例&#xff0c;并在此处进行描述。 捕获http会话ID的技巧是理解在浏览器和服务器之间建…

用过的jQuery记录

var list $(input:radio[name"name"]:checked).val();  //选择input中单选name为“name”的并且是选中状态的 index $(document).data(index);  //把参数存入document中保存起来并在下一次中取出再用index 1index $(document).data(index); str.find("input…

windows phone画板程序

前几天想要这样一个程序&#xff0c;没找到&#xff0c;今天上网偶然发现了&#xff0c;转载过来。 <Grid> <InkPresenter x:Name"MyPresenter" HorizontalAlignment"Left" VerticalAlignment"Top" MouseLeftButtonDown"MyP…

文件指针创建失败!File *fp失败

问题记录&#xff1a;项目是在所里边的vs2010上创建的&#xff0c;正常&#xff01;在自己的笔记本上使用vs13和19都一直报错&#xff01;指针一直为空&#xff01; 网上查了好久&#xff0c;试了很多方法都没有用&#xff01;最后发现是权限的问题&#xff0c;c盘下边创建不了…

前端开发:小程序--第一步

当我在接到小程序的项目的时候&#xff0c;几乎可以说是一脸懵因为对小程序的概念说实话是不太理解的&#xff0c;或者说理解的不太透彻&#xff0c;但是领导给项目说要完成&#xff0c;那没办法&#xff0c;还是要继续呀。 首先&#xff0c;我就想着先注册一个看看&#xff0…

但这是不可能的,或者无法发现JIT破坏了您的代码。

时不时地查看一些代码&#xff0c;并认为它不可能是错误的。 一旦您排除了简单的程序员搞砸代码/代码中的敌对行为&#xff08;确保您阅读Java Puzzlers或类似内容&#xff09;或并发问题&#xff08;阅读Java Concurrency或继续学习Heniz博士的出色课程 &#xff09;&#xff…

【解决】insert 语句无效果,在查询中正常运行问题

今天碰到一个奇怪的问题&#xff0c;具体见csdn&#xff1a;http://topic.csdn.net/u/20120424/19/0aeacbce-a9d5-4630-8b87-a08d5df1828b.html?seed1347097422&r78358698#r_78358698 解决方法与原因:猜测&#xff0c; 因为数据库是我再vs2010中建立的&#xff0c;数据库版…

最近开始研究和关注的技术

留个草稿&#xff0c;慢慢补充。 Acropolis&#xff0c;基于WPF的应用程序框架&#xff0c;某种角度可以认为是CAB的WPF实现&#xff1b; http://windowsclient.net/acropolis/&#xff0c;Cider似乎还是不完善......不知道VS2008 Release时能不能妥善处理好WPF在设计期的渲染。…

html行级元素和块级元素以及css转换

之前有说过html的标签是有语义的&#xff0c;当然也就有一些默认的样式&#xff0c;比如标题有h1h6&#xff0c;他们的字体由大至小一次递减&#xff0c;字体比一般字体要加粗。 这样也就有了行级元素和块级元素&#xff0c;下面来看看什么是行级元素什么事块级元素&#xff1…

EasyCriteria已演变为uaiCriteria。 新名称和更多功能

你好&#xff01;你好吗&#xff1f; 我很高兴宣布uaiCriteria的发布&#xff0c;EasyCriteria的演进。 确实需要更改框架名称吗&#xff1f; 是的&#xff0c;可悲的是。 我找到了另一个具有相同名称的框架 &#xff0c;这就是为什么我决定更改名称的原因&#xff08;我不希…

ajax方式下载文件

在web项目中需要下载文件&#xff0c;由于传递的参数比较多&#xff08;通过参数在服务器端动态下载指定文件&#xff09;&#xff0c;所以希望使用post方式传递参数。通常&#xff0c;在web前端需要下载文件&#xff0c;都是通过指定<a>标签的href属性&#xff0c;访问服…

了解Spring Web应用程序体系结构:经典方法

每个开发人员必须了解两件事&#xff1a; 架构设计是必要的。 花哨的体系结构图没有描述应用程序的真实体系结构。 真正的体系结构是从开发人员编写的代码中找到的&#xff0c;如果不设计应用程序的体系结构&#xff0c;最终将得到一个具有多个体系结构的应用程序。 这是否…

使用unicode

#include <iostream> class 我的类 { public:我的类(int 我的初始化变量){我的成员变量 我的初始化变量;}~我的类(){}int 我的成员变量;void 打印我的变量(){std::cout<<我的成员变量<<std::endl;}; };int main() {我的类 我的实例(1);我的实例.打印我的变量…

springmvc注解小示例(转)

转自&#xff1a;http://www.blogjava.net/pengo/archive/2010/11/28/339229.html 弃用了struts&#xff0c;用spring mvc框架做了几个项目&#xff0c;感觉都不错&#xff0c;而且使用了注解方式&#xff0c;可以省掉一大堆配置文件。本文主要介绍使用注解方式配置的spring mv…

解决maven项目Cannot change version of project facet Dynamic web module to 3.0

1、打开新建的servlet文件例如&#xff08;hibernate.cfg.xml&#xff09;修改头文件为 <?xml version"1.0" encoding"UTF-8"?><!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN" &quo…