2015-06-19 5 views
2

(я использую Windows.)Способ запуска Maven из скрипта Python?

Я пытаюсь запустить Maven из питона сценария. У меня есть это:

import subprocess 

mvn="C:\\_home\\apache-maven-2.2.1\\bin\\mvn.bat --version" 
p = subprocess.Popen(mvn, shell=True, stdout = subprocess.PIPE) 

stdout, stderr = p.communicate() 
print p.returncode # is 0 if success 

Он отлично работает, но мне интересно, о следующем:

  • Лучше способы добавления параметров вместо добавления строки.
  • Возможно, какой-то конкретный способ запустить maven без вышеуказанного.
  • Способ отображения вывода (в настоящее время он печатает только 1 или 0 на основе отказа/успеха).

То, что я пытаюсь сделать долгий срок (я отмечаю это в случае, если кто-то имеет лучший метод), это сделать простой скрипт для создания списка проектов и переместить будет сдвинут еще один список файлов (банки/другие измененные вещи) в папку для развертывания на виртуальные машины, это огромная боль сделать вручную. У меня это работает в пакетном скрипте без пота, мне просто интересно узнать Python и задаться вопросом, будет ли проще управлять, потому что я могу просто сделать пару списков и перебрать по каждому из местоположений, а не иметь строку для каждая задача в пакетном скрипте.

(короткая версия, что моя партия сценарий выглядит следующим образом.)

@set version=7.8.3 
@set staging_folder=C:\Users\me\Desktop\staging 

@set stage_was=%staging_folder%\was 
@set stage_ear=%stage_was%\stuffui.ear 
@set stage_war=%stage_ear%\stuff-%version%.war 

:: delete stage contents 
call del /s /q %staging_folder% 
call rmdir /s /q %stage_was% 

:: make folders 
call mkdir %stage_ear% 
call mkdir %stage_war%\WEB-INF\lib 

:: maven builds 
call mvn -f C:\workspace\pom.xml -pl proj1,proj2 clean install 

:: copy to stage 
call xcopy C:\workspace\proj1\target\thing1.jar %stage_ear%\ /i /y 

call xcopy C:\workspace\proj2\target\thing2.jar %stage_ear%\ /i /y 
call xcopy C:\workspace\proj2\target\thing2.jar %stage_war%\WEB-INF\lib\ /i /y 
+0

попробовать, как этот 'вызова MVN -f C: \ рабочее пространство \ pom.xml -pl "proj1, proj2" чистый install' – npocmaka

+0

Моя партия-скрипт работает как есть, я пытаюсь сделать что-то подобное в Python. –

+1

Я думаю, что важно сказать maven для запуска в пакетном режиме (поэтому он использует значения по умолчанию и не запрашивает ввод): mvn --batch-mode -v – wemu

ответ

1

Существует Apache Maven Invoker API.

Mark's answer to Accessing Java API information with Python упоминает:

Jython который Python работать на Java VM.

См my answers there для примера о том, как использовать Maven Invoker (внутри Java в данном конкретном случае).

+0

Я пытаюсь для уточнения, этот API Apache Maven Invoker является java, поэтому вы предлагаете использовать Jython, чтобы использовать его через JVM, но при этом технически использовать/изучать Python, правильно? –

+0

@CaptainMan Да, это правильно. –

0

Re:

в случае, если кто имеет лучший метод

Re:

движение другой список файлов (банки/другие модифицированные вещи) к папка

Вы рассматривали использование самого Maven (цель copy-resources его Resources Plugin в данном конкретном случае)?

Re:

Я просто интересно узнать Python

Поскольку вы работаете с Java в любом случае: Рассматривали ли вы Groovy как язык сценариев на ваш выбор?

Некоторые из его преимуществ:

  • Язык Java является подмножеством Groovy языка. То есть каждый код Java также является кодом Groovy. Вам не нужно использовать полноценный синтаксис Groovy с самого начала, изучая его.
  • Это может быть сценарий.
  • Поддерживается как скрипты и DSL в таких инструментах, как Jenkins.
+0

Спасибо за предложения, я буду переходите на ресурсы копирования, поскольку я не хочу обманывать файлы pom, если у меня их нет, и что касается Groovy vs Python, он просто поднимет тот же вопрос: «Как мне вызвать maven через Groovy» –

+0

@CaptainMan _ «как я могу вызвать maven через Groovy» _ - через Maven API-интерфейс Invoker, упомянутый в моем другом ответе. –

Смежные вопросы