我有一个 java 程序,它做了一些准备,然后在它准备的内容上调用 Jekyll。Jekyll 是作为 gem 安装在本地 PC 上的 Ruby 程序。在 windows 和 linux 上没问题,但是在 OSX 上运行时,在 eclipse 调试器下,Jekyll 不运行。大概这是因为交互式 shell 问题(Jekyll 在终端上运行良好)。
这是我的java代码:
DefaultExecutor exec = new DefaultExecutor(); // from org.apache.commons.exec
exec.setExitValue(0);
MyFilterHandler pumpHandler = new MyFilterHandler();
exec.setWorkingDirectory(new File("/Users/grahamegrieve/temp/igs/swissnoso/temp/pages"));
ProcessBuilder processBuilder = new ProcessBuilder(new String("bash -c jekyll build --destination /Users/grahamegrieve/temp/igs/swissnoso/output"));
Map<String, String> env = processBuilder.environment();
Map<String, String> vars = new HashMap<>();
vars.putAll(env);
String path = "/Users/grahamegrieve/.gem/ruby/3.1.0/bin:/Users/grahamegrieve/.gem/ruby/3.1.0/bin:/opt/homebrew/opt/ruby/bin:/Users/grahamegrieve/.nvm/versions/node/v17.4.0/bin:/opt/homebrew/bin:/opt/homebrew/sbin:"+env.get("PATH");
vars.put("PATH", path);
exec.execute(org.apache.commons.exec.CommandLine.parse("bash -c -i jekyll build --destination /Users/grahamegrieve/temp/igs/swissnoso/output"), vars);
这导致该过程的以下输出:
A subcommand is required.
其次是 Jekyll 的标准文档 - 所以 Jekyll 正在运行但没有获取参数。同样的事情发生在终端:
➜ ~ bash -c jekyll build --destination /Users/grahamegrieve/temp/igs/swissnoso/output
A subcommand is required.
jekyll 4.2.1 -- Jekyll is a blog-aware, static site generator in Ruby
Usage:
jekyll <subcommand> [options]
在终端中,我可以这样做:
➜ ~ bash -c 'jekyll build --destination /Users/grahamegrieve/temp/igs/swissnoso/output'
Configuration file: none
Source: /Users/grahamegrieve
Destination: /Users/grahamegrieve/temp/igs/swissnoso/output
Incremental build: disabled. Enable with --incremental
Generating...
因此,当整个命令包含在“”中时,参数可以正常工作。但是将''(或“”)放在java代码中会导致
Jekyll: bash: jekyll build --destination /Users/grahamegrieve/temp/igs/swissnoso/output: No such file or directory
据我所知,这意味着没有名为“Jekyll build ...”的文件。
所以我不知道如何在 OSX 上从我的 java 代码中调用 Jekyll。可能吗?