从Python脚本运行Maven的方法?

时间:2015-06-19 18:41:34

标签: python maven batch-file

(我正在使用Windows。)

我正在尝试从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)。

我想要长期实现的目标(我注意到,如果有人有更好的方法)是制作一个简单的脚本来构建项目列表并将另一个文件列表(罐子/其他修改过的东西)移动到要部署到VM的文件夹,手动操作非常痛苦。我有一个批处理脚本工作没有汗,我只是好奇学习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

2 个答案:

答案 0 :(得分:1)

Apache Maven Invoker API

Mark's answer to Accessing Java API information with Python提及:

  

Jython这是在Java VM上运行的Python。

有关如何使用Maven Invoker的示例,请参阅my answers there(在此特定情况下来自Java内部)。

答案 1 :(得分:0)

回复:

  

如果某人有更好的方法

回复:

  

将另一个文件列表(jar /其他修改过的东西)移动到一个文件夹

您是否考虑过使用Maven(在此特定情况下Resources PluginRKKR目标)?

回复:

  

我只是好奇学习Python

因为您正在使用Java:您是否认为Groovy是您选择的脚本语言?

它的一些优点:

  • Java语言是Groovy语言的子集。即每个Java代码也是Groovy代码。在学习它时,您不必从一开始就使用完整的Groovy语法。
  • 可以编写脚本。
  • DSL等工具中支持脚本和Jenkins