如何从Python脚本运行Maven?

2024-04-26 17:21:15 发布

您现在位置:Python中文网/ 问答频道 /正文

(我正在使用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)。

我试图长期完成的工作(我注意到如果有人有更好的方法的话)是制作一个简单的脚本来构建一个项目列表,并将另一个文件列表(jar/其他修改过的东西)移动到一个文件夹中部署到VMs中,手工操作是一个巨大的痛苦。我在一个批处理脚本中完成了这项工作,我只是很想学习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

Tags: 方法脚本target列表callstageworkspacejar
2条回答

回复:

in case someone has a better method

回复:

move another list of files (jars/other modified things) to a folder

您是否考虑过使用Maven本身(在这种特殊情况下,Maven的copy-resources目标)?

回复:

I am just curious to learn Python

既然您正在使用Java:您是否考虑过Groovy作为您选择的脚本语言?

它的一些优点:

  • Java语言是Groovy语言的一个子集。一、 每个Java代码也是Groovy代码。在学习Groovy时,不必从一开始就使用成熟的Groovy语法。
  • 它可以被脚本化。
  • 在像Jenkins这样的工具中,它被支持为脚本和DSL

这里是Apache Maven Invoker API

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

Jython which is Python run on the Java VM.

请参见my answers there以获取有关如何使用Maven调用程序的示例(在本例中,在Java中)。

相关问题 更多 >