2015-05-07 60 views
0

如果目標機器上沒有安裝maven,是否可以運行mvn命令?我知道這是一個奇怪的。如果在目標機器上沒有安裝maven,如何運行mvn

這是可能使用一些包裝工具/實用工具內置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(我已經創建並查看了所有物理髮布回購或僅使用company-repos虛擬,這樣我就不必使用||或一個一個地命名每個回購名稱wget的)。

如果還有其他方法,我不必使用wget。 Maven會自動在所有repos(你在settings.xml或pom.xml中定義的內容或者在命令行maven-dependency-plugin:get/copy中定義的內容)中自動找到工件和搜索。

我也可以在groovy中編寫代碼, groovy必須在目標服務器上。

+1

你可能會對gradle這個看看。關於這個主題的好處是,你可以用一個gradle包裝器的shell腳本和必要的gradle二進制文件來運送它。目標環境不需要安裝Gradle。 Gradle還可以正確處理存儲庫等。看看[這裏](http:// gradle。org/docs/current/userguide/gradle_wrapper.html)。 – u6f6o

+1

我不是百分百肯定你想要達到的目標。 [Capsule](https://github.com/puniverse/capsule)是一個用於構建可執行JAR的項目,它還支持從Maven倉庫下載依賴項。 –

+1

你也可以使用[Maven wrapper](https://github.com/takari/maven-wrapper)。但是,爲什麼不通過Maven創建一個包含所有東西的tar.gz壓縮文件,並只下載tar.gz文件? – khmarbaise

回答

1

遲到了,但我給你三個選項仍然:

1)ansible 2.0其他地方指出。仔細觀察,它看起來不像使用〜/ .m2/settings.xml支持。

2)http://blog.sonatype.com/2011/01/downloading-artifacts-from-nexus-with-bash

3)我寫的,廣泛使用的ansible作用。它將一個工件複製到我執行劇本的主機(例如jenkins),然後將工件複製到目標機器。這消除了需要在目標機器上安裝Maven,以及不再需要暴露我的圍欄環境中artifactory的/關係:

- name: download artifact from a maven repo to a temporary dir 
    shell: mvn -B -U org.apache.maven.plugins:maven-dependency-plugin:2.10:copy \ 
    -Dartifact={{ item.groupId }}:{{ item.artifactId }}:{{ item.version }}:{{ item.type }} \ 
    -DoutputDirectory={{ role_path }}/files/target \ 
    -Dmdep.useBaseVersion=true 
    with_items: "{{ gav_list }}" 
    register: shell 
    changed_when: "'Copying {{ item.artifactId }}-' in shell.stdout" 
    connection: local 

- name: copy artifact (same version will be overwritten if checksums \ 
    are different e.g. new snapshot) 
    copy: 
    src: target/{{ item.artifactId }}-{{ item.version }}.{{ item.type }} 
    dest: {{ item.dest }} 
    owner: {{ item.owner | default('root') }} 
    group: {{ item.group | default('root') }} 
    mode: {{ item.mode | default(0644) }} 
    with_items: "{{ gav_list }}" 

在我group_vars /環境,然後我做這樣的事情:

role_specific_gav_list: 
    - { groupId: 'org.postgresql', artifactId: 'postgresql', \ 
     version: '9.3-1102-jdbc41', type: 'jar', \ 
     dest: '{{ tomcat_home }}/lib' } 
# optionally owner, group and mode 

而這又是從site.yml或deploy.yml調用,傳遞role_specific_gav_list到gavdeploy角色:

hosts: tomcat 
    - { role: gavdeploy, gav_list: "{{ role_specific_gav_list }}" } 
+0

在Ansible手冊中,您可以使用[maven_artifact](http://docs.ansible.com/ansible/maven_artifact_module.html)模塊而不是調用'mvn'或執行'wget'下載。 – apa64

相關問題