bash:jar:找不到命令

时间:2014-05-08 10:14:13

标签: java bash jenkins

我使用 Jenkins 来部署构建。

我们需要将 .war 中的文件解压缩到某个目录中。 我们有一个 .xml 文件,其中包含从 .war 文件中提取文件并启动服务器的命令。

正在正确创建构建,但未发生 .war 提取,并且目标文件夹保留为空。 Jenkins控制台显示以下输出:

[sshexec] bash: jar: command not found

从其他答案中读到,我已将PATH正确地设置在 .bashrc .profile 中,但我还是面对同样的问题。

4 个答案:

答案 0 :(得分:18)

安装Java devel,如下所示:

        isBusy = true;
        Task.Factory.StartNew(() =>
            {
                //do some code. It is a new thread
            }).ContinueWith((x) =>
            {
                //do some code after previous task is done. This code runs in the UI thread
                isBusy = false;
            }, TaskScheduler.FromCurrentSynchronizationContext());

答案 1 :(得分:2)

" [sshexec]"告诉我你正在使用一些Jenkins插件在远程主机上执行命令。

这通常意味着Jenkins执行此操作(或通过本地实现SSH协议来执行此操作):

ssh user@remotehost 'jar arg1 arg2...'

这里发生的是远程主机上的sshd守护程序将执行用户的默认shell并要求shell执行命令行。 shell通常不会作为"登录shell"执行,这意味着shell将跳过登录shell在用户以交互方式登录时通常执行的初始化步骤。

您可以研究man (name of your shell)以确切了解使用-l选项执行的shell与使用.profile选项执行的shell之间的区别。对于bash,它实质上意味着.bashrc并且jar将不会被执行,因此您可能不会在那里进行任何PATH修改。

我认为您最好的选择是在执行时提供{{1}}命令的完整路径。

答案 2 :(得分:1)

具体而言,JAVA bin目录不在您的PATH变量中。将其添加到PATH变量。为了搜索可执行文件,操作系统需要有一个要查找的目录列表。因此,添加包含' jar tool in the PATH`环境变量

的目录

注意:对于Windows,路径分隔符为(;),对于类Unix操作系统,路径分隔符为(:

答案 3 :(得分:0)

当您在远程主机上执行命令时,它将调用远程主机上的新Shell。您在当前主机.bashrc文件中设置的PATH不会有任何区别。相反,如果你在远程主机的.bashrc中设置PATH for Java,那么如果你正在运行任何脚本,那么其他东西应该工作,然后提到JAR的完整路径,如/usr/jdk64/jdk1.8.0_40/bin/jar -tf /tmp/jars/abc.jar在远程主机上调用命令时。

两种方法:

  1. export PATH = $ PATH:/usr/jdk64/jdk1.8.0_40/bin --->在远程主机的.bashrc

  2. /usr/jdk64/jdk1.8.0_40/bin/jar -tf /tmp/jars/abc.jar - >从远程主机调用带有JAR完整路径的jar命令。