Я работаю над созданием сборки gradle, которая создает пару подпроектов, а затем публикует их в артефакте. Для публикации артефактов мне нужно использовать имя переменной в качестве имени артефакта. Это необходимо, поскольку имя артефакта содержит метку времени, обозначающую время, когда он был построен. Из журналов я вижу, что фактическая публикация происходит после завершения сборки для подпроектов, но похоже, что переменная, которую я использую для имени артефакта, инициализируется до, следовательно, выдает ошибку. Ниже представлена издательская часть:
publishing {
publications {
// This publishes fine as it is picking the latest
tests(MavenPublication) {
artifactId 'tests'
artifact ('tests/build/libs/tests.jar')
}
// I need to use a variable name for this
// This looks for a .carb file in the sub project build directory
carb(MavenPublication) {
def carbFile = new File('carb/build/carbs').eachFileRecurse(FILES) {
if (it.name.endsWith('.carb')) {
carbFileName = it
}
}
println carbFileName
artifactId 'carb'
artifact carbFileName
}
}
}
Для целевой публикации 'carb' я ожидал, что carbFileName будет заполнен во время публикации, но этого не произошло. Я вижу оператор println до начала публикации, поэтому он содержит неверное значение. какие-нибудь предложения, чтобы справиться с этим?
Файл carb создается с помощью подпроекта (с использованием плагина), как и в случае с тестовой банкой. Я не могу заархивировать файлы, так как есть некоторые зависимости от других проектов, которые используют его в текущем виде. Я придумал другое решение. Я использую artifactoryPublish.dependsOn для вызова задачи, которая будет искать в каталоге сборки carb и копировать файл paste * .carb и при этом переименовывать его, используя текущее время, определенное в основном проекте. Таким образом, у меня будет точное имя файла, которое я могу использовать в качестве имени артефакта.
Спасибо за обновления. Думаю, я бы предложил нечто подобное. Поскольку вы сами нашли ответ, может быть, стоит добавить его в качестве ответа на свой вопрос для других, сталкивающихся с той же проблемой?


Создан ли файл carb, который необходимо опубликовать, вашей сборкой Gradle? Если да, то как? Предполагается ли, что файл будет опубликован как есть (например, без архивирования)?