在Azure管道中通过命令运行Java实用程序不会传递参数

问题描述

我已经创建了一个实用程序(java jar文件),可以在构建过程中生成一个文件。并将其放入我的源代码根文件夹的/tools文件夹中。

在azure管道中,我正在使用这种方法在构建项目(Xamarin项目)时运行此jar文件。

  - task: CmdLine@2
    inputs:
      script: "java -jar $(build.SourcesDirectory)/tools/version2image.jar $(fullVersionText) $(androidVersionFileLocation)"

任务启动正常,但是在日志中,我得到以下信息:

2020-08-17T14:48:45.4688112Z java -jar D:\a\1\s/tools/version2image.jar 1.0.0.123 'D:\a\1\s/XamarinProject/XamarinProject.Android/Resources/drawable/version.png'
2020-08-17T14:48:45.5231861Z ========================== Starting Command Output ===========================
2020-08-17T14:48:45.5731945Z ##[command]"C:\windows\system32\cmd.exe" /D /E:ON /V:OFF /S /C "CALL "D:\a\_temp\d5706f7c-43cd-4d50-8f17-98a6ae0a3391.cmd""
2020-08-17T14:48:46.8000947Z Version 2 Image Utility. version 1.0
2020-08-17T14:48:46.8001744Z 
2020-08-17T14:48:46.8002367Z 
2020-08-17T14:48:46.8003059Z Usage:
2020-08-17T14:48:46.8004115Z 
2020-08-17T14:48:46.8004468Z java -jar version2image.jar version_string output_file_location
2020-08-17T14:48:46.8004769Z 
2020-08-17T14:48:46.8005096Z Example:
2020-08-17T14:48:46.8005464Z 
2020-08-17T14:48:46.8005739Z java -jar version2image.jar 1.0.0.121 c:/myproject/images/version.png
2020-08-17T14:48:46.8005961Z 
2020-08-17T14:48:46.8507661Z ##[section]Finishing: CmdLine

换句话说,Azure无法将参数正确传递给jar文件。我的应用程序认为它是在没有参数的情况下启动的。

但是当我在计算机上本地运行此实用程序时,它运行正常。

如果有帮助,在Java实用程序中,我将获得如下命令行参数:

 final int correctParamsCount = 2;
 if (args.length != correctParamsCount) {
   System.out.println("Usage:\n\njava -jar version2image.jar <version_string> <output_file_location>\n");
   System.out.println("Example:\n\njava -jar version2image.jar 1.0.0.121 c:/myproject/images/version.png\n");
    System.exit(0);
  }

  final String versionNumber = args[0];
  final String outputFilePath = args[1];

如何解决此问题?

解决方法

要解决此问题(感谢@riQQ),我应该更新AndroidVersionFileLocation变量,并从路径中删除单引号。

并在实用程序命令调用中添加双引号:

它应该像这样:

script: 'java -jar $(build.SourcesDirectory)/tools/version2image.jar "$(fullVersionText)" "$(androidVersionFileLocation)"'

代替此:

script: "java -jar $(build.SourcesDirectory)/tools/version2image.jar $(fullVersionText) $(androidVersionFileLocation)"

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...