从Python脚本运行Maven的方法?
(我正在使用Windows。) 我正在尝试从python脚本运行maven。我有这个:从Python脚本运行Maven的方法?,python,maven,batch-file,Python,Maven,Batch File,(我正在使用Windows。) 我正在尝试从python脚本运行maven。我有这个: 导入子流程 mvn=“C:\\\\u home\\apache-maven-2.2.1\\bin\\mvn.bat--version” p=subprocess.Popen(mvn,shell=True,stdout=subprocess.PIPE) stdout,stderr=p.communicate() 打印p.returncode#如果成功,则为0 它工作正常,但我想知道以下几点: 添加参数而不是
导入子流程
mvn=“C:\\\\u home\\apache-maven-2.2.1\\bin\\mvn.bat--version”
p=subprocess.Popen(mvn,shell=True,stdout=subprocess.PIPE)
stdout,stderr=p.communicate()
打印p.returncode#如果成功,则为0
它工作正常,但我想知道以下几点:
- 添加参数而不是追加字符串的更好方法
- 也许有一些特定的方式来运行maven,而不需要上述内容
- 显示输出的一种方式(目前仅根据失败/成功打印1或0)
我试图长期完成的(我注意到,如果有人有更好的方法),就是制作一个简单的脚本来构建一个项目列表,并将另一个文件列表(JAR/其他修改的东西)移动到一个文件夹以部署到VMs,手动操作是一件非常痛苦的事情。我可以在批处理脚本中工作,这一点不费吹灰之力,我只是想学习Python,想知道它是否更容易管理,因为我可以创建几个列表并迭代每个位置,而不是在批处理脚本中为每个任务设置一行 (我的批处理脚本的简短版本。) 有一个问题 提到: 这是在Java虚拟机上运行的Python 有关如何使用Maven Invoker的示例,请参见(在本例中,从Java内部) 以防有人有更好的方法 关于: 将另一个文件列表(JAR/其他修改内容)移动到文件夹中 您是否考虑过使用Maven本身(在这种特殊情况下,
copy resources
its的目标)
关于:
我只是想学Python
既然您正在使用Java:您是否考虑过将其作为您选择的脚本语言
它的一些优点:
- Java语言是Groovy语言的一个子集。也就是说,每个Java代码也是Groovy代码。在学习Groovy时,您不必从一开始就使用成熟的Groovy语法
- 可以编写脚本
- 它作为脚本和类似的工具受到支持
调用mvn-f C:\workspace\pom.xml-pl“proj1,proj2”clean install
我的批处理脚本按原样工作,我正在尝试用Python制作类似的东西。我认为告诉maven以批处理模式运行很重要(因此它使用默认值,不提示输入):mvn--批处理模式-v@wemu最好是-V
,而不是-V
。参见Maven:完整参考,6.1.4。显示版本信息:“_true.只是想强调批处理模式-并且弄乱了-v(这与-v不同)-非常正确:)感谢您的建议,我将传递复制资源,因为如果我没有太多的pom文件,我不想愚弄pom文件,而对于Groovy vs Python,它只会提出同样的问题:”我如何通过Groovy调用maven“@CaptainMan”如何通过Groovy调用maven”-通过我在这里的另一个答案中提到的maven调用器API。我试图澄清,这个ApacheMaven调用器API是java,所以你建议我使用Jython通过JVM利用它,同时在技术上仍然使用/学习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