一、概念
Artifact
翻译为:构件、工件。
代表的是一个领域对象,它包含了一个要被发布的文件,和它怎样被发布的信息。(如一个 jar 文件和它的 pom 文件。)
PublishArtifact
是通过一个 project 生产的一个 artifact
ConfigurablePublishArtifact
是一个可配置的 PublishArtifact
artifact {}
用于配置一个 ArtifactHandler
artifact {} 中内容
artifact {} 中的每条配置都会生成一个 ConfigurablePublishArtifact
(dependencies {} 的每条会生成一个 Dependency,根据不同的类型,有不同的子类)
二、使用
2.1 使用 archives
Gralde 的 base plugin
会给 project 中的每个 configuration 都生成一个 build「ConfigurationName」
task 和一个 upload「ConfigurationName」
task。
执行 build、upload 会 build、upload 该 configuration 拥有的 artifacts。
如 java plugin
中有一个 archives
的 configuration,base plugin 会根据它生成 uploadArchives。
所以一般来说,可以用 archives 来声明一个 artifact
task gdJar(type: Jar) {
doLast {
println "gdJar exec"
}
}
artifacts {
// 将 gdJar 看做 artifact,交给 archives 管理
archives gdJar
}
// Gradle 自动生成的 task
uploadArchives {
repositories {
// 上传到本地 maven 仓库
maven {
// 会在 build.gradle 同目录生成文件夹
url "file:myRepoMaven"
}
}
}
执行 uploadArchives task 后,就会将 gdJar 生成的 jar 文件,上传到对应仓库目录下。
2.2 使用自定义 Configuration
task gdJar(type: Jar) {
doLast {
println "gdJar exec"
}
}
artifacts {
// 将 gdJar 看作 artifact,交给 gdArchives 管理
gdArchives gdJar
}
uploadGdArchives {
repositories {
// 上传到本地 maven 仓库
maven {
// 会在 build.gradle 同目录生成文件夹
url "file:myRepoMaven"
}
}
}
执行 uploadGdArchives task 后,就会将 gdJar 生成的 jar 文件,上传到对应仓库目录下。
2.3 使用 maven 插件
maven
插件提供了 mavenDeployer
的配置块,仍以 gdArchives 这个 configuration 为例:
apply plugin: 'maven'
uploadGdArchives {
repositories {
// 上传到本地 maven 仓库
// maven 插件提供的 mavenDeployer
mavenDeployer {
// 会在项目根目录生成文件夹
def url = 'file:myRepoMaven'
repository(url: url)
}
}
}
执行 uploadGdArchives task 后,就会将 gdJar 生成的 jar 文件,上传到对应仓库目录下。
2.4 使用 maven-publish 插件
maven
插件是较原始的 artifact 发布方式,maven-publish
插件是更新的,也是 Gradle 更提倡的 artifact 发布方式。
maven-publish 定义了发布的 what、where、how。
publishing {
// 定义要发布的东西,what
publications {
myLibrary(MavenPublication) {
from components.java
}
}
// 定义要发布的地点,where
repositories {
maven {
name 'myRepo'
url "file:myRepoMaven"
}
}
// how
// publications 和 repositories 会组成相应的 task
// publish「PubName」PublicationTo「RepoName」Repository:
// publish「MyLibrary」PublicationTo「MyRepo」Repository
}
执行 publishMyLibraryPublicationToMyRepoRepository
task 后,就会将 gdJar 生成的 jar 文件,上传到对应仓库目录下。