Я работаю над проектом Java, который будет распространяться среди нескольких клиентов, но мне необходимо указать имя клиента в переменной в коде Java для использования при ведении журнала и проверке версий.
Есть ли способ установить список параметров в gradle, который при запуске задачи сборки будет генерировать несколько jar-файлов, по одному для каждого из параметров? Для каждого jar-файла потребуется добавить переменную к имени архива и изменить переменную Java в основном классе, чтобы она соответствовала.
Например, если у меня есть ['Client A', 'Client B'] в виде массива градиентов, мне понадобится project-client-a.jar с переменной MainClass.CLIENT = "Client A" и отдельный jar с project-client-b.jar с MainClass.CLIENT = "Client B".
Мой инстинкт состоит в том, чтобы использовать функцию расширения для замены значения в файле свойств, включенном в jar, но я не уверен, как «зациклить» несколько артефактов и сопоставлений замены.




Хотя чистое решение Gradle по-прежнему предпочтительнее, для этого я использовал комбинацию пользовательской задачи Exec и скрипта Python.
import sys
import shutil
import zipfile
from pathlib import Path
clients = ["Client A", "Client B"]
for client in clients:
Path("./published/" + client).mkdir(parents=True, exist_ok=True)
with zipfile.ZipFile("./build/libs/PROJECT-" + sys.argv[1] + ".jar", "r") as zipo:
with zipfile.ZipFile("./published/" + client + "/PROJECT-" + sys.argv[1] + ".jar", "w") as zipf:
zipf.comment = zipo.comment
for item in zipo.infolist():
if item.filename != "PROJECT.properties":
zipf.writestr(item, zipo.read(item.filename))
zipf.writestr("PROJECT.properties", "client = " + client)
Этот код принимает один аргумент (номер версии, который мы настраиваем) и создает копии jar для каждого клиента, удаляя файл свойств теста и записывая новый. У каждого клиента есть папка в «опубликованном» каталоге в корне проекта со своей настроенной версией встроенного jar.
(Этот фрагмент был очищен и немного упрощен, поскольку на самом деле он используется для одновременной упаковки нескольких проектов, поэтому могут быть незначительные синтаксические ошибки.)
Вероятно, вам нужно написать какой-нибудь умный сценарий