如何使用Gradle构建Groovy JAR并将其发布到内部repo
我有一个Groovy项目,正在尝试与Gradle一起构建它。首先,我需要一个如何使用Gradle构建Groovy JAR并将其发布到内部repo,groovy,jar,gradle,artifactory,Groovy,Jar,Gradle,Artifactory,我有一个Groovy项目,正在尝试与Gradle一起构建它。首先,我需要一个包任务,该任务通过根据依赖项编译JAR来创建JAR。然后,我需要为该JAR生成一个Maven POM,并将JAR/POM发布到内部的Artifactory repo。build.gradle: apply plugin: "groovy" apply plugin: "maven-publish" repositories { maven { name "artifactory01"
包
任务,该任务通过根据依赖项编译JAR来创建JAR。然后,我需要为该JAR生成一个Maven POM,并将JAR/POM发布到内部的Artifactory repo。build.gradle
:
apply plugin: "groovy"
apply plugin: "maven-publish"
repositories {
maven {
name "artifactory01"
url "http://myartifactory/artifactory/libs-release"
}
}
dependencies {
compile "long list starts here"
}
// Should compile up myapp-<version>.jar
jar {
}
// Should publish myapp-<version>.jar and its (generated) POM to our in-house Maven/Artifactory repo.
publishing {
publications {
myPublication(MavenPublication) {
from components.java
artifact sourceJar {
classifier "source"
}
pom.withXml {
// ???
}
}
}
}
task wrapper(type: Wrapper) {
gradleVersion = '1.11'
}
apply插件:“groovy”
应用插件:“maven发布”
存储库{
马文{
名称“artifactory01”
url“http://myartifactory/artifactory/libs-release"
}
}
依赖关系{
编译“长列表从这里开始”
}
//应该编译myapp-.jar
罐子{
}
//应该将myapp-.jar及其(生成的)POM发布到我们的内部Maven/Artifactory repo。
出版{
出版物{
我的出版物(MavenPublication){
来自components.java
工件源jar{
分类器“源”
}
pom.withXml{
// ???
}
}
}
}
任务包装器(类型:包装器){
gradleVersion='1.11'
}
但是,我认为我没有正确地使用
jar
任务设置版本控制(例如,我如何才能让它创建myapp-1.2.1
而不是myapp-1.2.2
?我也不认为我的出版物配置设置正确:应该在pom中设置什么。使用XML
?包
是Java/Groovy中的一个关键字,您必须使用不同的语法来声明任务。)那个名字
无论如何,应该删除package
的任务声明,因为jar
任务已经达到了这个目的。jar
任务配置(jar{from…}
)应该位于最外层(不嵌套在另一个任务中)编译不太可能是您想要的,因为这会将编译依赖项的Jar包含到Jar中(常规Java类装入器无法处理),而不是将它们合并到Jar中。(您确定需要一个胖Jar吗?)
同样,应该删除publish
任务声明,并将其替换为publishing{publications{…}
另外,可能应该删除buildscript
块,并且repositories{…}
和dependentials{…}
移动到最外层。(buildscript{dependentials{…}
声明构建脚本本身的依赖项(例如Gradle插件),而不是要编译/运行的代码的依赖项。)
我建议查看完整Gradle发行版(Gradle all
)的samples
目录中的许多自包含示例构建。非常欢迎您为此使用artifactory
插件。
文档可以在和下面找到,您可以找到gradle build的完整工作示例
运行gradlebuildartifactorypublish
以生成和发布项目
buildscript {
repositories {
jcenter()
}
dependencies {
classpath(group: 'org.jfrog.buildinfo', name: 'build-info-extractor-gradle', version: '3.0.1')
}
}
apply plugin: 'java'
apply plugin: 'maven-publish'
apply plugin: 'com.jfrog.artifactory'
group = 'com.jfrog.example'
version = '1.2-SNAPSHOT'
status = 'SNAPSHOT'
dependencies {
compile 'org.slf4j:slf4j-api:1.7.5'
testCompile 'junit:junit:4.11'
}
task sourcesJar(type: Jar, dependsOn: classes) {
classifier = 'sources'
from sourceSets.main.allSource
}
publishing {
publications {
main(MavenPublication) {
from components.java
artifact sourcesJar
}
}
artifactory {
contextUrl = 'http://myartifactory/artifactory'
resolve {
repository {
repoKey = 'libs-release'
}
}
publish {
repository {
repoKey = 'libs-snapshot-local'
username = 'whatever'
password = 'whatever123'
}
defaults {
publications 'main'
}
}
}
谢谢@Peter Niederwieser-请查看我的编辑。您的输入非常有用,我按照您的建议将其与gradle all
中的代码示例拼凑在一起。不过,我有几个后续问题:(1)运行gradle jar
时如何实现版本控制?对于发布,我应该在pom.withXml
中放置什么?您可以设置version
属性。除非您想添加其他(可选)内容,否则无需使用pom.withXml
关于POM的信息。谢谢@JBaruch,我一定会尝试一下!好奇:我如何使用这个构建脚本打包(JAR)并发布JAR?我假设gradle JAR
和gradle publish
?再次感谢!