我正在学习Gradle,来自Ant + Ivy和Maven背景,我正试图围绕正确的方式来使用gradle发布我的软件的发布版本.我还需要不断地集成我的项目,而不必不断发布独立的工件.
Ant +常春藤
在Ant + Ivy世界中,我可以创建publishSnapshot和publishRelease目标.这些可以使用不同的常春藤解析器来解析和发布到我在Nexus中的单独快照或发布存储库.
Maven的
使用Maven,我可以定义一个snapshotRepository或repository在我的distributionManagement部分中将maven发布到我的单独快照或在Nexus中发布存储库.
摇篮
现在输入gradle.我怎样才能实现同样的功能?我正在使用常春藤风格的存储库.
感谢您提供的任何见解.
回答
感谢René在下面的回答,我终于能够创建一个可行的解决方案.问题的关键在于我需要不断整合我的所有项目.为此,我认为使用版本号声明依赖latest.integration是获取最新版本库的唯一方法,因此我需要使用常春藤样式存储库.
实际上,还有其他方法可以引入最新版本的库,以便在所有项目中不断集成我的软件.解决的办法是使用uploadArchives完全一样勒列出以下(也请注意,您将需要apply plugin: 'maven'为此工作.确保你的资料库也Maven的风格,并宣布的依赖时,您可以使用动态版本号如图所示这里.在我的情况是,我在common.gradle和下游项目中列出了一个全局版本号,我曾经version: version引用过全局版本变量.这样,我系统中的每个工件都有相同的版本.当它需要发布时,我可以将此值从1.0-SNAPSHOT更改为1.0并按顺序构建每个.
我想dependency在gradle中打印最后一个版本.
我以这种方式添加了我的依赖:
compile 'test:test:+'
Run Code Online (Sandbox Code Playgroud)
现在我想打印我的依赖版本,因为我想知道我正在使用哪个版本.
我正在以这种方式使用它:
gradle dependencyInsight --configuration compile --dependency test:test
Run Code Online (Sandbox Code Playgroud)
但我的输出是这样的:
+--- test:test:+ -> project : (*)
Run Code Online (Sandbox Code Playgroud)
无论如何,我可以得到我的依赖的真实版本,而不是+?
我有一个带有pom.xml的"项目B",如下所示:
<parent>
<groupId>org.company</groupId>
<artifactId>projectA</artifactId>
<version>RELEASE</version>
</parent>
<artifactId>projectB</artifactId>
<version>0.0.1</version>
Run Code Online (Sandbox Code Playgroud)
其中"项目B"将"项目A"作为父项目pom.
我正在尝试使用gradle创建一个新的"项目C",如果我想使用"项目B"作为依赖项,我指定build.gradle如下:
repositories {
maven {
url "http://mycompany:8081/artifactory/repository"
}
}
dependencies {
compile group: 'org.company', name: 'projectB', version: '0.0.1'
}
Run Code Online (Sandbox Code Playgroud)
但是我收到以下错误:
无法解析org.company:projectB:0.0.1.
无法解析POM http:// company:8081/artifactory/repository/org/company/projectB/0.0.1/projectB-0.0.1.pom
找不到org.company:projectA:RELEASE.
从设置我的projectA版本号到特定的版本号,有没有办法让这个版本与gradle一起工作?
有没有办法让gradle找到像maven正在做的正确版本?我的其他maven项目找到正确的版本没有问题.
我不想得到项目A的最新版本,也许下载完整的项目B jar就足够了.
PD我在本地计算机上使用gradle版本4.5和maven版本3.5.2
我在build.gradle上有这个:
testCompile(group: 'junit', name: 'junit', version: '4.+')
Run Code Online (Sandbox Code Playgroud)
决议为:
junit:junit:4.+ -> 4.12-beta-1
Run Code Online (Sandbox Code Playgroud)
我不想使用beta版本,但同时我想使用动态版本。在这种情况下,我想依靠4.11。
可能吗?怎么样?
注意:Maven“版本”插件-如何从响应中排除alpha / beta版本?有一个Maven的答案,但我不确定如何在Gradle中翻译。
我正在尝试在 Eclipse 中学习 Gradle。
是否有任何很好的集成,您可以在其中搜索要包含在项目中的 Jar?
现在,这是我这边的一次偶然性操作。
例子:
我想从 Apache Commons 添加 CLI 库。还有编解码器库。
我像这样添加了 jcenter() 和 mavenCentral:
repositories {
jcenter()
mavenCentral()
}
Run Code Online (Sandbox Code Playgroud)
我在依赖项部分尝试过这个(和变体):
compile 'org.apache.commons:cli:1.2'
compile 'org.apache.commons:codec:1.10'
Run Code Online (Sandbox Code Playgroud)
但我得到的只是
Could not resolve: org.apache.commons:cli:1.2
Could not resolve: org.apache.commons:codec:1.10
Run Code Online (Sandbox Code Playgroud)
在 search.maven.org 中搜索时,如果我在 org.apache.commons 上搜索,我会得到 111 页的点击量……我还没有找到时间逐一浏览它们。
在搜索 commons-cli 时,它找到了 2005 年的版本...加上一个名为的库
org.mod4j.org.apache.commons cli
Run Code Online (Sandbox Code Playgroud)
不知道“mod4”是什么意思。
结论是这些存储库中不存在 Apache 公共资源吗?
在这些情况下你是怎么做的?您如何提出正确的“编译”规范?
例如,我可以说“获取此 jar 的最新版本”吗?
很想有办法做到:
gradle search apache-commons --only-latest-version
Run Code Online (Sandbox Code Playgroud)
或类似的东西。类似于 Ruby 中美妙的 GEM/BUNDLE 命令。
感谢所有帮助
我正在尝试进行设置,以便可以使用Gradle版本插件,而不必将其添加到我的所有build.gradle文件中。
基于对相关问题的回答,我尝试创建一个文件~/.gradle/init.d/50-ben-manes-versions.gradle:
initscript {
repositories {
jcenter()
}
dependencies {
classpath 'com.github.ben-manes:gradle-versions-plugin:0.17.0'
}
}
allprojects {
apply plugin: com.github.ben-manes.versions
}
Run Code Online (Sandbox Code Playgroud)
如果然后尝试./gradlew dependencyUpdates在回购中调用,则会得到:
FAILURE: Build failed with an exception.
* Where:
Initialization script '~/.gradle/init.d/50-ben-manes-versions.gradle' line: 13
* What went wrong:
Could not get unknown property 'com' for root project 'project-name' of type org.gradle.api.Project.
Run Code Online (Sandbox Code Playgroud)
这个答案说不要在插件名称周围使用引号,但是由于这样不起作用,我尝试添加引号(即:)apply plugin: 'com.github.ben-manes.versions'。这样我得到:
FAILURE: Build failed with an exception.
* Where:
Initialization script '~/.gradle/init.d/50-ben-manes-versions.gradle' line: 13 …Run Code Online (Sandbox Code Playgroud)