将jar和源jar从Gradle发布到Artifactory
这是我的将jar和源jar从Gradle发布到Artifactory,gradle,artifactory,Gradle,Artifactory,这是我的build.gradle: buildscript { repositories { maven { url 'http://localhost:8081/artifactory/plugins-release' credentials { username = "admin" password = "password" }
build.gradle
:
buildscript {
repositories {
maven {
url 'http://localhost:8081/artifactory/plugins-release'
credentials {
username = "admin"
password = "password"
}
name = "maven-main-cache"
}
}
dependencies {
classpath "org.jfrog.buildinfo:build-info-extractor-gradle:3.0.1"
}
}
apply plugin: 'groovy'
apply plugin: 'maven'
apply plugin: 'codenarc'
apply plugin: 'maven-publish'
apply plugin: "com.jfrog.artifactory"
version="0.0.2"
group = "mylib"
repositories {
mavenCentral()
add buildscript.repositories.getByName("maven-main-cache")
maven {
url "http://localhost:8081/artifactory/myapp-snapshots"
}
}
dependencies {
compile 'commons-validator:commons-validator:1.4.0'
testCompile 'junit:junit:4.11'
}
artifactory {
contextUrl = "http://localhost:8081/artifactory"
publish {
repository {
repoKey = 'myorg-snapshots'
username = "admin"
password = "password"
maven = true
}
defaults {
publications ('mavenJava')
}
}
}
publishing {
publications {
mavenJava(MavenPublication) {
from components.java
}
}
}
task sourcesJar(type: Jar, dependsOn: classes) {
classifier = 'sources'
from sourceSets.main.allSource
}
artifacts {
archives sourcesJar
}
task dist(type: Zip, dependsOn: build) {
classifier = 'buildreport'
from('build/test-results') {
include '*.xml'
into 'tests'
}
from('build/reports/codenarc') {
into 'reports'
}
from('build/docs') {
into 'api'
}
from(sourcesJar) {
into 'source'
}
from('build/libs') {
exclude '*-sources.jar'
into 'bin'
}
}
基于此当前设置:
- 要构建我的JAR,我必须运行
,然后gradle clean build groovydoc sourcesJar dist
- 要发布到Artifactory,我必须运行第二个命令
gradleartifactorypublish
gradle-artifactoryPublish
只将我构建的JAR和动态创建的POM发布到Artifactory。我希望它也发布我的构建所创建的源JAR怎么做?;及gradlepublish
来完成上述所有操作,而不必按顺序运行这两个命令这可能吗?如果是,怎么做?在发布源代码时,您需要按以下方式修改脚本:
publishing {
publications {
mavenJava(MavenPublication) {
from components.java
artifact (sourcesJar) {
classifier = 'sources'
}
}
}
}
当涉及到单个命令时,您需要做的是定义任务之间的依赖关系。不幸的是,我无法尝试该脚本,因此它可能是多余的,但应该执行以下操作:
artifactoryPublish.dependsOn('clean', 'build', 'groovydoc', 'sourcesJar', 'dist')
publish.dependsOn(artifactoryPublish)
请查看我的答案,并让我知道它是否有效。出于某种奇怪的原因,将“clean”作为依赖项添加到
artifactoryPublish
会导致所有内容都生成,然后清理,然后尝试发布。。。这显然是失败的,因为现在已经没有什么可以发布了。我如何才能强制“清除”发生在其他事情之前?一个解决方案(尽管我不知道它是否是最好的)是使用以下方法:compileJava.dependsOn('clean')
artifactoryPublish
可能在内部定义了依赖项。明天将进行检查。找不到artifactoryPublish
任务的源代码,因此我无法调查依赖关系。你还想让我做什么?我想获得赏金:)sourcesJar
,不需要先定义任务吗?