Как запустить mvn, если на целевой машине не установлен maven

Можно ли запускать команды mvn, если на целевой машине не установлен maven? Я знаю, что это странно.

Возможно ли это с помощью некоторого инструмента / утилиты оболочки, в которую встроены инструменты maven / etc в инструмент / утилиту оболочки?

Это то, чего я пытаюсь достичь. Использование Ansible (и Maven) для получения артефакта в заданную папку с удаленного сервера Artifactory.

  1. Я хочу скачать артефакт из Artifactory.
  2. На целевой машине не установлен maven (mvn).
  3. Если я создаю небольшой сценарий оболочки с одним вкладышем, тогда мне придется иметь дело со всеми репозиториями один за другим, то есть в некотором порядке (т.е. сначала заглянуть в репозиторий релиза, затем перейти к моментальному снимку и т. Д., Или наоборот).

    (wget http://myArtifactoryServer:somePort/artifactory/libs-snapshot-local/com/company/product/artifactName/version/artifactNameVersion.extension || wget http://myArtifactoryServer:somePort/artifactory/libs-stage-local/com/company/product/artifactName/version/artifactNameVersion.extension || wget http://myArtifactoryServer:somePort/artifactory/libs-alpha-local/com/company/product/artifactName/version/artifactNameVersion.extension || wget http://myArtifactoryServer:somePort/artifactory/libs-beta-local/com/company/product/artifactName/version/artifactNameVersion.extension || wget http://myArtifactoryServer:somePort/artifactory/libs-gamma-local/com/company/product/artifactName/version/artifactNameVersion.extension || wget http://myArtifactoryServer:somePort/artifactory/libs-release-local/comcompany/product/artifactName/version/artifactNameVersion.extension)

Мне было интересно, есть ли другой самый простой способ получить артефакт, просто указав «имя виртуального репо», то есть libs-release (который я создал и просматривает все репозитории физических выпусков или просто использует виртуальные репозитории компании, чтобы я не Я должен называть каждое имя репо одно за другим с помощью || или с помощью wget).

Мне тоже не нужно использовать wget, если есть другой способ. Maven автоматически находит артефакт и выполняет поиск во всех репозиториях (что вы определяете в settings.xml или pom.xml или в командной строке maven-dependency-plugin: get / copy)

Я также могу писать код на groovy, но тогда на целевом сервере должен быть Groovy.


person AKS    schedule 07.05.2015    source источник
comment
Вы могли бы взглянуть на gradle. Преимущество этой темы заключается в том, что вы можете отправить ее со сценарием оболочки gradle и необходимым двоичным файлом gradle. В целевой среде не нужно устанавливать gradle. Gradle также правильно обрабатывает репозитории и т. Д. Обертку можно найти здесь.   -  person u6f6o    schedule 07.05.2015
comment
Я не уверен на сто процентов, чего вы пытаетесь достичь. Capsule - это проект для создания исполняемых файлов jar, он также поддерживает загрузку зависимостей из репозиториев maven.   -  person Felix Leipold    schedule 07.05.2015
comment
Вы также можете использовать оболочку Maven. Но почему бы вам не создать архив tar.gz, содержащий все это, через Maven и загрузить только файл tar.gz?   -  person khmarbaise    schedule 07.05.2015
comment
Похоже, что в Ansible 2.0 я могу легко загрузить артефакт из Artifactory ... Пока что у меня есть Ansible ‹2.0, и я пытался использовать maven-dependency-plugin: копировать / получать цели, но в этом посте имел дело с этой проблемой .   -  person AKS    schedule 07.05.2015


Ответы (1)


Поздно на вечеринку, но тем не менее:

Перечитав вопрос, вам не хватает, как вы упомянули, виртуального репо, которое объединяет репо, так что они кажутся единым целым. Artifactory поддерживает это из коробки.

В качестве альтернативы maven, для которой не требуется ничего, кроме bash, вы можете попробовать этот сценарий оболочки из sonatype http://blog.sonatype.com/2011/01/downloading-artifacts-from-nexus-with-bash.

person Jepper    schedule 11.02.2016
comment
В сборнике сценариев Ansible вы можете использовать модуль maven_artifact вместо вызова mvn или wget загрузки . - person apa64; 12.06.2017