Вы можете создать сценарий в Groovy и загрузить его в Nexus, чтобы делать то, что вы хотите.
Вот пример сценария, который я написал для возврата всех версий для данной группы и репозитория.
Содержание version.json
:
{
"name": "version",
"type": "groovy",
"content": "import org.sonatype.nexus.repository.storage.Query;
import org.sonatype.nexus.repository.storage.StorageFacet;
import groovy.json.JsonOutput;
def groupId = args.split(',')[0];
def repositoryId = args.split(',')[1];
def repo = repository.repositoryManager.get(repositoryId);
StorageFacet storageFacet = repo.facet(StorageFacet);
def tx = storageFacet.txSupplier().get();
tx.begin();
def components = tx.findComponents(Query.builder().where('group = ').param(groupId).build(), [repo]);
def found = components.collect {
def baseVersion = it.attributes().child('maven2').get('baseVersion');
\"${baseVersion}\"
};
found = found.unique();
tx.commit();
def result = JsonOutput.toJson(found);
return result;"
}
Интересная часть здесь — это tx.findComponents()
, который возвращает общий класс Component
. Этот класс предоставляет дополнительную информацию о своем контейнере с помощью функции attributes()
. Затем вы можете использовать его, чтобы получить baseVersion
, то есть версию, которую Maven использовал (с суффиксом -SNAPSHOT
).
Чтобы установить этот скрипт, просто запустите следующее:
curl -v -X POST -u <NEXUS_ADMIN>:<NEXUS_PWD> --header "Content-Type:application/json" http://<SERVER_NEXUS>/nexus/service/siesta/rest/v1/script -d @version.json
Затем вы можете легко протестировать его с помощью:
curl -v -X POST -u <NEXUS_ADMIN>:<NEXUS_PWD> --header "Content-Type: text/plain" "http://<SERVER_NEXUS>/nexus/service/siesta/rest/v1/script/version/run" -d "com.my.groupid,snapshots"
Это вернет все версии, которые вы хотите, как вы хотели:
{
"name" : "version",
"result" : "[\"1.5.2-SNAPSHOT\",\"1.5.3-SNAPSHOT\",\"1.6.1-SNAPSHOT\",\"1.5.0-SNAPSHOT\"]"
}
Надеюсь, это поможет!
person
Florent Dupont
schedule
02.05.2017