我们以发布到Maven仓库为例,我们需要用到Maven Publish Plugin插件。
接下来的例子,我们定义一个Java库,并最终打包成jar并发布到本地Maven仓库中。
首先需要在build.gradle文件中新增MavenPublish插件:
plugins {
id 'java-library'
id 'maven-publish'
}
我们应用了maven-publish插件后,就可以在build.gradle文件中配置publications和仓库了,如下使用publishing{}
块进行配置:
group = 'org.example'
version = '1.0'
publishing {
publications {
myLibrary(MavenPublication) {
from components.java
}
}
repositories {
mavenLocal()
}
}
上面我们定义了一个名为myLibrary的publication,from components.java
这句表明是一个java库,也就是最终会以jar包的形式发布。还定义了一个本地maven仓库,表明myLibrary的jar包最终会被发布到本地maven仓库。components
定义了发布的组件,支持三个值:components.java
(由JavaPlugin添加)、components.web
(由WarPlugin添加)、components.javaPlatform
(由JavaPlatformPlugin添加)。如果我们需要将一个web项目打包成war包发布,则使用components.web
。我们当前的例子为jar,则使用components.java
。
Gradle使用与Maven相同的逻辑来标识本地Maven缓存的位置。如果在
settings.xml
中定义了本地Maven仓库位置,那么Gradle将使用这个位置。USER_HOME/.m2
下的settings.xml
将会覆盖M2_HOME/conf
中的settings.xml
。如果没有可获取的settings.xml
,Gradle将默认使用USER_HOME/.m2/repository
作为本地Maven仓库位置。
MavenPublishPlugin提供了如下tasks:
任务 | 描述 |
generatePomFileForPubNamePublication | 创建需要发布的名为PubName的POM文件,填充已知的元数据,如项目名称、项目版本和依赖项。POM文件的默认位置是build/publications/$pubName/pom-default.xml. |
publishPubNamePublicationToRepoNameRepository | 将PubName发布到名为RepoName的存储库。如果你有一个没有显式名称的存储库定义,RepoName将是“Maven”。 |
publishPubNamePublicationToMavenLocal | 将PubName发布复制到本地Maven缓存-通常是$USER_HOME/.m2/repository-以及发布的POM文件和其他元数据。 |
publish | 将所有定义的publication发布到所有定义的存储库的聚合任务。它不包括将publication复制到本地Maven库。 |
publishToMavenLocal | 将所有定义的publication复制到本地 Maven 库中,包括它们的元数据 (POM 文件等) |
我们在项目中执行./graldew tasks
会看到Publishing tasks任务组,如下:
Publishing tasks
----------------
generateMetadataFileForMyLibraryPublication - Generates the Gradle metadata file for publication ’MyLibrary‘.
generatePomFileForMyLibraryPublication - Generates the Maven POM file for publication ’MyLibrary‘.
publish - Publishes all publications produced by this project.
publishMyLibraryPublicationToMavenLocal - Publishes Maven publication ’MyLibrary‘. to the local Maven repository.
publishToMavenLocal - Publishes all Maven publications produced by this project to the local Maven cache.
我们执行./graldew publishMyLibraryPublicationToMavenLocal
命令,gralde就会自动构建打包并发布到你的本地maven仓库中,如果你配置了setting.xml并指定了maven仓库位置的话,那么发布就是该地址,如果没有指定maven仓库地址,则默认是USER_HOME/.m2/repository
。