本文介绍通过maven内部服务器共享java库,即共享jar包的方法。
1. java本地仓库说明
本文将介绍如何将(通过gradle构建的)java公共库通过nexus共享到服务器上,然后其他客户端就可以轻松的引用到该java公共库。
涉及到的内容可以分为三个部分:
第一部分:创建本地仓库。即,在nexus创建仓库。
第二部分:共享jar包。即,将jar包共享到nexus本地仓库中。
第三部分:引用jar包。即,使用"共享到nexus本地仓库中的jar包"。
2. 创建本地仓库
第1步 新建Hosted Repository
在Repositories中点击"Add",选择"Hosted Repository"。 如下图所示
第2步 编辑"新建的Hosted Repository"
选择新建的"Hosted Repository",此时它的名称是"New Hosted Repository"。选择它,然后点击"Configuration"。在Configuration中,只需要进行以下几项设置;
(1) Repository ID: 这是可以随意定义,只要不和已有的仓库ID重复即可。为了增加可读性,建议根据共享的jar包的名字来命名。
(2) Repository Name: 这个也是可以随意定义的。建议根据共享库的名字来命名。
(3) Povoder: 选择"Maven2"即可。
(4) Repository Policy: 选择"release"即可。
(5) Deployment Policy: 选择"Allow Redeploy(允许部署)"。
除了上面的几项之外,其他的不需要设置;然后,点击"Save"。
第3步 查看"新建的Hosted Repository"
点击"Save"之后,新建的"Hosted Repository"的名称就变成上面设置的"Repository ID的值"。点击该仓库,此时该仓库有"Repository Path"和"Default Local Storage Location"等值。
3. 共享jar包
下面介绍如何"将jar包共享到nexus本地仓库中"。
前面已经创建好了jar包本地仓库,下面介绍如何将jar包共享到本地仓库。
本文演示用的jar包已共享到github上,点击查看jar包的源码,这份源码也是本文的示例源码。
下面介绍"对于用户已有的jar包"如何修改,从而使它能被共享到nexus本地仓库。这里仅仅介绍通过gradle自动构建的jar包,对于通过ant或者maven构建的工程,这里不予介绍。
第1步 编辑jar包的build.gradle
编译jar包的build.gradle,添加以下内容:
apply plugin: 'maven'
def isReleaseBuild() {
return VERSION_NAME.contains("SNAPSHOT") == false
}
def getRepositoryUsername() {
return hasProperty('NEXUS_USERNAME') ? NEXUS_USERNAME : ""
}
def getRepositoryPassword() {
return hasProperty('NEXUS_PASSWORD') ? NEXUS_PASSWORD : ""
}
afterEvaluate { project ->
uploadArchives {
repositories {
mavenDeployer {
pom.groupId = GROUP
pom.artifactId = POM_ARTIFACT_ID
pom.version = VERSION_NAME
repository(url: RELEASE_REPOSITORY_URL) {
authentication(userName: getRepositoryUsername(), password: getRepositoryPassword())
}
snapshotRepository(url: SNAPSHOT_REPOSITORY_URL) {
authentication(userName: getRepositoryUsername(), password: getRepositoryPassword())
}
}
}
}
task sourceJar(type: Jar) {
from sourceSets.main.allJava
}
artifacts {
archives sourceJar
}
}
说明:直接将该内容添加到build.gradle的末尾即可,不需要对上面的内容进行额外的修改!
第2步 编辑gradle.properties
编辑andriod公共库中的gradle.properties,添加以下内容。如果没有gradle.properties,则新建该文件。
## GROUP的值是自定义的。它表示群组;若要将该库发布的maven中,则它是库在maven中的groupId值。
GROUP=com.skw.java.util
## VERSION_NAME的值是自定义。它表示版本号;若要将该库发布的maven中,则它是库在maven中的版本号。
VERSION_NAME=0.0.1
## POM_ARTIFACT_ID的值是自定义。它表示artifactId;若要将该库发布的maven中,则它是库在maven中的artifactId。
POM_ARTIFACT_ID=MathLibrary
## 指定值。SNAPSHOT_REPOSITORY_URL是"库在nexus中的Repository Path的值"
SNAPSHOT_REPOSITORY_URL=http://127.0.0.1:8081/nexus/content/repositories/MathLib
## 指定值。RELEASE_REPOSITORY_URL是"库在nexus中Configuration栏的Default Local Storage Location的值"
RELEASE_REPOSITORY_URL=file:/home/project/skywang/opt/nexus/sonatype-work/nexus/storage/MathLib
## 指定值。nexus的用户名
NEXUS_USERNAME=admin
## 指定值。nexus的密码
NEXUS_PASSWORD=54wangkuiwu
说明:
(1) GROUP: 它的值是自定义的,建议取包名。
(2) VERSION_NAME: 它的值是自定义的,建议取库的版本号。
(3) POM_ARTIFACT_ID: 它的值是自定义的,建议取库的名称。
(4) SNAPSHOT_REPOSITORY_URL: 它必须是nexus中Repository Path的值。
(5) RELEASE_REPOSITORY_URL: 它必须是nexus中库的Configuration栏目中Default Local Storage Location的值。
(6) NEXUS_USERNAME: 它必须是nexus的用户名。
(7) NEXUS_PASSWORD: 它必须是nexus的密码。
第3步 共享jar包库
在jar包库下面运行gradle uploadArchives
来共享库到nexus中。该指令正常运行的界面如下所示。
再回到nexus中,点击仓库的"Browse Storage",会发现里面有jar包。
这表示jar包被共享到nexus中!
4. 引用java包
下面介绍在其他的java工程中引用"上面共享到nexus中java公共库"的方法。
使用nexus中的java库,只需要在build.gradle中添加以下内容即可。
repositories {
maven {
// 本地服务器中WheelView仓库的路径
url "http://127.0.0.1:8081/nexus/content/repositories/MathLib"
}
}
dependencies {
// jar包的groudid等信息
compile 'com.skw.java.util:MathLibrary:0.0.1'
}
点击查看使用jar包的示例的源码。