Развертывание проекта gradle в nexus через bamboo


У меня есть проект java с gradle, и я использую Bamboo в качестве своего CI / CD. Мой план сборки создает jar, а мой план развертывания (предполагает) развертывание jar в nexus. Моя сборка работает идеально и создает артефакты (jar, файл build.gradle, файл gradle.properties и файл gradle.settings).

Когда я хочу запустить свой план развертывания, я запускаю команду uploadArchives в bamboo. Эта команда также запускает команду jar, которая уничтожает мой jar (делает его 261 байт). Решение, которое я нашел, это просто сказать грэдлу пропустить команда jar (используя -x jar), но я чувствую, что есть лучшее решение.

Есть ли в гральде специальная команда, чтобы заставить его работать? или есть способ сказать gradle, чтобы он выполнил определенную команду без предшествующих команд? может быть, что-то вроде команды maven для загрузки сторонних библиотек? Я искал везде, но не мог найти.

Благодарим!

1 2

1 ответ:

Это то, как работает Gradle, и это зависит от того, как вы настроили свои сборки. Но вообще говоря, вы можете создать задачу, которая публикует только файл (это ни от чего не зависит). Вам нужно будет использовать плагин maven-publish. Например, рассмотрим следующую конфигурацию

apply plugin: 'maven-publish'

group= "gradle-test"
version = "1.0-SNAPSHOT"
task produce {
  ext {
    outputFile = file("$buildDir/file.txt")
  }
  outputs.file  outputFile
  doLast {
    outputFile  << "Hello World!"
  }
}

task zipGreeting(type: Zip) {
    from produce.outputs
}

publishing {
    publications {
        newGreeting(MavenPublication) {
            artifact zipGreeting
        }
        oldGreeting(MavenPublication) {
            artifact {
              produce.outputFile
            }
        }
    }
}

Со следующей конфигурационной задачей publishNewGreetingPublicationToMavenLocal зависит от zipGreeting и produce (поскольку она зависит от вывода produce), поэтому в конце Gradle вызовет их, если их выходы не являются актуальными (I предположим, что это происходит с вашей jar задачей - > Gradle up-to-date check зависит от локального .gradle каталога кэша)

Но publishOldGreetingPublicationToMavenLocal не имеет явной зависимости от какой-либо другой задачи, поэтому если вы вызовете gradle publishOldGreetingPublicationToMavenLocal. Gradle попытается найти упомянутый файл и просто загрузить его в Maven Local. Очевидно, что он потерпит неудачу, если файл не будет там.