Gradle 替代 mvn install
Posted
技术标签:
【中文标题】Gradle 替代 mvn install【英文标题】:Gradle alternate to mvn install 【发布时间】:2011-09-01 14:38:13 【问题描述】:我在 mvn 上构建了 2 个不同的项目。我正在尝试替换为 Gradle。
项目 1 是一个 SDK,项目 2 正在使用该 SDK(示例)。
在 maven 时,它使用 mvn install 创建工件,将整个项目添加到本地存储库中。
我喜欢这样在 gradle 中工作。我喜欢项目 1 build.gradle 需要将其发布为 gradle 本地存储库,然后示例项目需要使用它。
在 Maven 中,我们执行 mvn install,它将项目工件添加到 .m2 文件夹中,但如何在 gradle 中执行,以便我可以将项目工件添加到本地存储库中。
我有什么办法吗?
【问题讨论】:
***.com/questions/2572811/… 【参考方案1】:sdk/build.gradle
:
apply plugin: "maven"
group = "foo"
version = "1.0"
example/build.gradle
:
repositories
mavenLocal()
dependencies
compile "foo:sdk:1.0"
$sdk> gradle install
$example> gradle build
【讨论】:
apply plugin: "maven" and $sdk> gradle install 这会将 sdk 安装到 .m2 中,对吗?并且 mavenLocal() 还从 .m2 和 .gradle 获取信息?gradle install
发布到本地 Maven 存储库,mavenLocal()
确保在那里查找依赖项。
Gradle 不像 Maven 那样“面向阶段”吗? IOW,如果我执行gradle publish
,它不会也经历install
阶段吗?
@PeterNiederwieser 我是否应该考虑 apply plugin: "maven"
为 Gradle 提供“安装”任务,对吗? - 在某种程度上 - 这是从 Maven 到 Gradle 的“传递”(如果该术语适合这里)任务,对吧?考虑更新您的答案。谢谢
这在 Gradle 7+ 中不再相关,因为 maven
插件已被删除。相反,您需要使用maven-publish
插件,然后使用gradle publishToMavenLocal
。【参考方案2】:
您可能正在寻找:
gradle publishToMavenLocal
适用于:
apply plugin: 'maven-publish'
见:Maven Publish Plugin
【讨论】:
即使使用 maven 选项也能正常工作:gradle -Dmaven.repo.local=.m2/repository publishToMavenLocal
这与使用maven
插件的gradle install
有何不同?
@Matthew maven
插件已在 Gradle 7 中删除【参考方案3】:
查看Gradle's documentation on multi-project builds。
这是一个示例,其中包含一些额外的依赖项。只需在根文件夹中调用gradle install
,所有内容都将构建并放入您的本地仓库。
文件夹结构:
root
+--> build.gradle
+--> settings.gradle
+--> sdk
| +--> build.gradle
+--> example
+--> build.gradle
root/build.gradle:
allprojects
apply plugin: 'java'
apply plugin: 'maven'
group = 'myGroup'
version = '0.1-SNAPSHOT'
root/settings.gradle:
include 'sdk'
include 'example'
root/sdk/build.gradle:
dependencies
// just an example external dep.
compile group:'commons-lang', name:'commons-lang', version:'2.3'
root/example/build.gradle:
dependencies
compile project(':sdk')
compile group:'log4j', name:'log4j', version:'1.2.16'
【讨论】:
这是理想的做法吗?如果他想创建一个新项目example2,它也依赖于sdk怎么办?现在他必须将 2 个不相关的项目放在一个根项目下,只是因为它们共享一个依赖项?您会认为整个“多项目”设置也将是 1 个 Git 项目。同样,这对公司/多开发人员的工作流程有害吗?【参考方案4】:您需要将自己的库发布到本地存储库。您可以通过以下方式做到这一点:
添加maven-publish
插件:
plugins
// your other plugins come here...
id 'maven-publish'
将发布部分添加到您的构建文件中:
publishing
publications
myCoolLibrary(MavenPublication)
from components.java
运行gradle build publishToMavenLocal
在the documentation 中查找更多详细信息。
【讨论】:
以上是关于Gradle 替代 mvn install的主要内容,如果未能解决你的问题,请参考以下文章
Gradle 相当于 `mvn clean -Dmaven.test.skip=true install`
bat脚本中使用gradle或maven等外部命令后,脚本不继续执行,直接退出
bat脚本中使用gradle或maven等外部命令后,脚本不继续执行,直接退出