使用Java开发完成一个模块或者一个基础框架需要提供给团队项目使用,这个时候有两种方式可提供,一是提供源码,二是提供编译构建好的jar包供使用,这个时候需要讲构建好的包发布到公司的私服(公司maven仓库),可以通过项目构建工具Maven发布也可以通过Gradle发布。下面我以Gradle发布为例。
在项目build.gradle文件中添加依赖一个maven发布的插件'maven-publish'
plugins {
id 'maven-publish'
}
发布之前需要配置需要发不到maven仓库的地址以及认证相关参数。
allprojects {
group 'com.test'
version '1.0.4'
//指定字符编码
tasks.withType(JavaCompile){
options.encoding = "UTF-8"
}
}
publishing {
publications {
myLibrary(MavenPublication){
groupId project.group //默认是模块的group,需要跟build时保持一致
// artifactId project.name //默认是模块的artifactId,需要跟build时保持一致
version project.version //默认是模块的版本,需要跟build时保持一致
from components.java //发布的是jar包,发布war包components.web。
}
}
repositories{
//发布到本地maven 仓库文件夹,会发布到本地仓库${USER_HOME}/.m2/setting.xml配置的仓库目录
//publish 和 publishToMavenLocal都会执行
mavenLocal()
//发布到本地私服nexus,
//只有publish才会执行
maven {
credentials {
username = 'xxx'
password = 'xxx
}
allowInsecureProtocol = true //允许http访问
url = 'http://localhost:8081/repository/aipark-hosted' //本地nexus私服地址,如果写失败,需要对nexus仓库设置权限。
}
}
}
配置完maven发布的配置后执行发布命令
gradle clean publish
如果没有安装gradle可以通过gradlew执行
./gradlew clean publish
也可以通过gradle面板执行,如下图:
发不到本地maven仓库
gradle clean publishToMavenLocal
publish和publishToMavenLocal的执行有何区别?
publish:所有定义的publication发布到所有定义的存储库的聚合任务。也就是build.gradle脚本publishing配置本地何远程的仓库都会执行。
publishToMavenLocal:将所有定义的publication复制到本地 Maven 库中,包括它们的元数据 (POM 文件等),不会执行远程仓库的发布。
执行publish可以看到本地maven仓库,也就是${USER_HOME}/.m2/setting.xml配置的仓库目录
我的本地maven仓库目录在:${USER_HOME}/Documents/mavenReposity/
本地maven仓库:
远程maven私服仓库:
?