Java 如何使用mvn-f将pom.xml打包为文件夹树中的两个文件夹?
我正在Windows平台上编写一个脚本,需要在其中打包Maven项目。现在的问题是我需要正确地使用这个命令,Java 如何使用mvn-f将pom.xml打包为文件夹树中的两个文件夹?,java,maven,batch-file,Java,Maven,Batch File,我正在Windows平台上编写一个脚本,需要在其中打包Maven项目。现在的问题是我需要正确地使用这个命令,pom.xml位于上两层的文件夹中,或者cd..,cd.. 此命令行未按预期工作需要进行哪些修改 mvn -f \.\.\ package -DskipTests 当前目录为: C:\Users\mike\Documents\mavenapp\fold1\fold2 我需要在过去的两个文件夹中执行mvn,即在目录mavenapp中 我不想这样做,因为这将是一个硬编码的解决方案: mv
pom.xml
位于上两层的文件夹中,或者cd..
,cd..
此命令行未按预期工作需要进行哪些修改
mvn -f \.\.\ package -DskipTests
当前目录为:
C:\Users\mike\Documents\mavenapp\fold1\fold2
我需要在过去的两个文件夹中执行mvn
,即在目录mavenapp
中
我不想这样做,因为这将是一个硬编码的解决方案:
mvn -f C:\Users\mike\Documents\mavenapp package -DskipTests
您是否尝试过
mvn../../../pom.xml包
?我建议首先阅读Microsoft文档,每个在Windows上为Windows程序或脚本编写代码的程序员都应该至少阅读一次。文件夹路径规范\.\.
引用当前驱动器的根目录(第一个反斜杠),下一个目录再次引用\
,下一个目录再次引用一个您不想要的\
。打开,运行call/?
并阅读解释如何引用批处理文件参数的输出帮助。参数0始终是批处理文件本身。因此,如果批处理文件存储在%UserProfile%\Documents\mavenapp\fold1\fold2
中,并且希望在命令行中使用上两级文件夹的路径,则最好使用mvn-f“%~dp0….”包-DskipTest
引用此文件夹。我建议不仅要编写mvn
,而且至少要编写具有文件扩展名的mvn
。(.exe
或.com
或.cmd
或.bat
,我不知道。)请注意,用%~dp0
引用的批处理文件路径始终以Windows目录分隔符\
结尾,因此,%~dp0
与文件或文件夹名称或通配符模式的串联应始终在不使用额外反斜杠的情况下完成,而不使用批处理文件的100%有效参数字符串如果执行时的当前目录与包含批处理文件和所有其他文件和文件夹的目录不同,则此选项不起作用。默认情况下,Windows资源管理器将开始处理批处理文件的cmd.exe的当前目录设置为批处理文件目录。但是当前目录在使用以管理员身份运行时可能不同,或者批处理文件存储在网络资源上,并且使用UNC路径访问网络资源。当然,也可以在命令提示符窗口中运行批处理文件,并在任何目录中使用完全限定的文件名。换句话说,此代码使用Linux/Mac目录分隔符/
而不是Windows目录分隔符\
仅是偶然的,而不是设计的,因为它期望进程启动处理批处理文件的cmd.exe
将命令进程的当前工作目录cmd.exe
设置为批处理文件的目录。Windows计算机上有数千个目录,这些目录可能是启动cmd.exe
处理批处理文件时的当前工作目录,但只有一个目录可以使用此代码。通过加载奇怪的路径,命令行没有正确的方法。正确的方法应该是在需要运行mvn的地方添加pom文件。但对于快速解决方案,我认为使用../是一个很好的选择。我想告诉您的是,。/
在Windows上并不正确,因为目录分隔符是\
,因此。\
应该用于引用具有相对路径的文件pom.xml
。是的,。/
也可以工作,因为Microsoft在关于的文档中描述了Windows文件管理将所有/
自动替换(更正)。但是,在Windows上使用\
作为目录分隔符,而不是/
更好。关于目录结构、哪个目录是批处理文件执行时的当前目录以及mvn
成功处理这些文件所需的所有文件在哪里,这个问题还不够详细。据我所知,我认为你的答案中有一个。/
(或者更好的。\
)用得太多了。我还认为,使用相对于批处理文件文件夹的路径引用文件pom.xml
比使用相对于当前目录的路径引用文件pom.xml
要好。然而,提问者接受了你的回答。