maven引用遗留项目的jar文件:上传任意一个jar 包到maven 仓库


原创 赵峻伟 Wise2C

简述

现在大家进行Java程序开发新项目的时候都会使用maven来安装和管理依赖文件,而不是直接将各种各样的jar包拷贝到项目classpath 目录(web 项目通常是 WEB-INF/lib 目录)下来编译和运行项目了。

但是我们在日常使用maven 开发的时不时会遇到这样的情况,我们想要使用的一个jar 文件在公网各大 maven 仓库中找不到,亦或是我们的一个项目需要依赖一个之前公司内部研发的jar包,这个jar包之前都是通过手动拷贝放到classpath 目录下来运行项目的。难道我们为了这样的情况就不得不忍受把jar拷贝到classpath 目录下,让这个不必要的二进制文件在svn/git 仓库里面停留,浪费空间和流量,拖慢下载代码的速度?

不是的!你有更好的选择,你可以很方便的把任何jar包(通常是没用maven 构建的),上传到公司的私有maven 仓库。这样你就可以使用maven 的方式来引用这个依赖了。

<dependency>
<groupId>yourcompany.com</groupId>
<artifactId>yourartifact.name</artifactId>
<version>2.4</version>

</dependency>

实践

假定我们需要将C:/sqljdbc4.jar 上传到我们的仓库服务器(http://yourrepo.com/nexus)。

首先我们需要在本地配置maven的server节点,该配置用于从仓库下载或者上传包时用于进行用户身份验证。(下载是可能会用到,视仓库服务器设置而定。)

通常maven依赖可以上传到两种仓库:Snapshots、Releases,分别为快照版仓库,主要用于存放不稳定的开发包。后者用于存放稳定版本的包。

在 $MAVEN_HOME/conf/settings.xml 配置文件中添加如下内容:

<server>
<id>snapshots</id>
<username>你的用户名</username>
<password>你的密码</password></server>
<server>
<id>releases</id>
<username>你的用户名</username>
<password>你的密码</password></server

然后打开cmd,将其定位到你要上传的jar包的文件夹,类似地输入以下命令:

mvn deploy:deploy-file –DgroupId=com.huacloud.jar –DartifactId=sqljdbc4 –Dversion=1.0.0 –Dpackaging=jar –Dfile=sqljdbc4.jar –DrepositoryId=snapshots –Durl=http://yourrepo.com/nexus/cont ... shots

需要注意的是 –Dversion 、 -DrepositoryId 、-Durl 是一一对应的,如版本是snapshot ,仓库id 也应该是snapshot仓库的ID,仓库地址也需要填写snapshot仓库的url。 如果cmd 当前路径与jar包的路径在同一文件夹下,-Dfile 直接写文件名即可,如果不在同一个目录下,需要在-Dfile 后面写上文件的绝对路径。

如果当你运行上述命令时出现如下的错误:

The goal you specified requires a project to extcute but there is no POM in this directory. Please verify you invoked Maven from the correct directory.

通常是由于操作系统之间的差异,你可以尝试这样:

"–DgroupId=com.huacloud.jar"

给所有的参数就加上双引号包起来,就可以解决问题了。

eee478ab336e1ccb66cc87d5abeda3a5.jpg


这样你的jar包就上传成功了!以后就直接在pom.xml 里面直接引用了。

福利

使用maven,gradle 的同学都知道,每每下载依赖的时候,面对几KB的速度,都有一种痛不欲生,浪费生命的感觉。这里分享两个国内访问速度超快的maven仓库: 阿里云maven仓库、Google maven 仓库,你肯定会问Google 不是被和谐了吗,用过你就知道了,Google 应该是在国内提供了对该网站的CDN缓存,速度超快的。添加mirror 到你的maven 全局配置文件,或者是在pom.xml 以repository的方式使用都可以!

<settings>
<mirrors>
<mirror>
<id>google-maven-central</id>
<name>Google Maven Central</name>
<url>https://maven-central.storage.googleapis.com</url>
<mirrorOf>central</mirrorOf>
</mirror>
<mirror>
<id>aliyun</id>
<name>aliyun</name>
<url>http://maven.aliyun.com/nexus/content/groups/public</url>
<mirrorOf>central</mirrorOf>
</mirror>
</mirrors></settings>

a9bf2b2.jpg

0 个评论

要回复文章请先登录注册