【问题标题】:How do I start an executable jar from within a .sh script?如何从 .sh 脚本中启动可执行 jar?
【发布时间】:2013-02-07 06:28:34
【问题描述】:

我有一个可执行的 jar 文件,我想从 Ubuntu Linux 上的 *.sh 脚本开始。

当前 myapp.sh 文件如下所示(错误:“没有发生任何事情”):

java -jar myapp.jar --start

我也试过了(error: "/bin/sh: 0: Can't open java"):

/bin/sh java -jar myapp.jar --start

and (error: "/bin/sh: 0: Can't open java -jar myapp.jar --start"):

/bin/sh "java -jar myapp.jar --start"

myapp.sh 文件具有 rwx 权限...当我调用 ./myapp.jar 时没有任何反应。

有人有解决这个问题的方法吗?

非常感谢。

编辑 1:这是我的 MANIFEST.MF:

Manifest-Version: 1.0
Ant-Version: Apache Ant 1.8.3
Created-By: 1.6.0_38-b05 (Sun Microsystems Inc.)
Class-Path: lib/gf-client.jar lib/security.jar lib/eclipselink-2.3.2.j
 ar lib/javax.persistence-2.0.3.jar lib/org.eclipse.persistence.jpa.jp
 ql_1.0.1.jar lib/org.eclipse.persistence.jpa.modelgen.processor-2.3.2
 .jar lib/javaee-api-6.0.jar lib/LawSuiteFXW.jar lib/AbsoluteLayout.ja
 r lib/beansbinding-1.2.1.jar lib/antlr-2.7.7.jar lib/antlr-runtime-3.
 3.jar lib/bootstrapconnector.jar lib/commons-codec-1.5.jar lib/common
 s-collections-3.2.1.jar lib/commons-compress-1.3.jar lib/commons-dige
 ster-1.7.jar lib/commons-email-1.2.jar lib/commons-io-2.4.jar lib/com
 mons-lang-2.4.jar lib/commons-lang3-3.1.jar lib/commons-logging-1.1.1
 .jar lib/commons-vfs2-2.0.jar lib/glazedlists_java15-1.9-20111127.203
 634-11.jar lib/icepdf-core.jar lib/icepdf-viewer.jar lib/jasypt-1.9.0
 .jar lib/jcommon-1.0.17.jar lib/jfreechart-1.0.14.jar lib/jhall.jar l
 ib/jms.jar lib/joda-time-2.1.jar lib/junit-3.8.1.jar lib/log4j-1.2.15
 .jar lib/migcalendarbean.jar lib/PDFRenderer-0.9.1.jar lib/xmlsec-2.0
 .jar lib/avalon-framework-api-4.3.1.jar lib/avalon-framework-impl-4.3
 .1.jar lib/docx4j-2.8.1.jar lib/fop-1.0.jar lib/itext-2.1.7.jar lib/j
 axb-svg11-1.0.2.jar lib/jaxb-xmldsig-core-1.0.0.jar lib/jaxb-xslfo-1.
 0.1.jar lib/poi-3.8.jar lib/poi-scratchpad-3.8.jar lib/serializer-2.7
 .1.jar lib/stringtemplate-3.2.1.jar lib/wmf2svg-0.9.0.jar lib/xalan-2
 .7.1.jar lib/xhtmlrenderer-1.0.0.jar lib/xml-apis-1.3.04.jar lib/xmlg
 raphics-commons-1.4.jar lib/poi-ooxml-3.8-20120326.jar lib/poi-ooxml-
 schemas-3.8-20120326.jar lib/batik-1.1.1.jar lib/ftp4j-1.7.2.jar lib/
 AppleJavaExtensions-1.4.jar lib/swingx-all-1.6.4.jar lib/swingx-beani
 nfo-1.6.4.jar lib/pdfbox-1.7.1.jar lib/fontbox-1.7.1.jar lib/jempbox-
 1.7.1.jar lib/jai_codec.jar lib/jai_core.jar lib/java-mail-1.4.6.jar 
 lib/LawSuiteSE.jar
X-COMMENT: Main-Class will be added automatically by build
Main-Class: ch.acme.core.Main

编辑 2:

我使用以下代码启动我的 GUI 应用程序:

public static void main(String[] args) {
    EventQueue.invokeLater(new Runnable() {
        @Override
        public void run() {
            Main m = new Main();
            m.setVisible(true);
        }
    });
}

将其删除到以下内容,解决了问题。有什么想法???

public static void main(String[] args) {
    Main m = new Main();
    m.setVisible(true);
}

【问题讨论】:

  • 您是否在MANIFEST.MF 中定义了您的Main-Class
  • 你还没说你所展示的有什么问题......
  • 请输入 java -version
  • 当然。 MANIFEST.MF 设置正确。通过在终端中键入“java -jar myapp.jar --start”,应用程序可以正常工作。如果 java 安装正确,这也回答了这个问题。
  • 好的,我在上述试验中添加了错误消息......非常感谢任何帮助。

标签: java linux shell sh


【解决方案1】:

您可能会添加一些内容以帮助我们帮助您

  • 向我们展示 JAR(清单)的内容
  • 如何构建可执行 Jar(Maven?)

要能够从您需要的可执行 Jar 启动应用程序:

在清单中定义主类 在清单中定义类路径并在 jar 中包含所有依赖项 要么 将 -cp 添加到 java 调用中,并带有指向您的依赖项的类路径的路径

编辑:从 cmets 确定,我理解 java 命令工作正常......所以你的问题是 sh

将此添加到您的 sh 顶部

!/bin/ksh

然后输入 ./scriptname.ksh 来启动它

(如果您绝对需要在 sh 中运行,请将 ksh 替换为 sh)

编辑 2: 我使用的 Ksh 示例:

#!/bin/ksh

JAVA_HOME16=/usr/java16/bin

${JAVA_HOME16}/java -Drunningenv=dev -Dbatch.jdbc.user=${DB2_CODE_USAGER}     -Dbatch.jdbc.password=${DB2_MOT_PASSE} -jar ${BASEDIR}/BD_PVFI/bin/spring-batch-    conciliation-1.0.0-SNAPSHOT.jar input.desj.file=${INPUTFILE_DESJ}
rc=$?

【讨论】:

  • 感谢您的回答。 #!/bin/ksh 还是 !/bin/ksh ?我需要 sh,我的 Ubuntu 上默认没有安装 ksh。
  • #!/bin/sh 然后。这应该这样做;-)
【解决方案2】:

尝试使用完整路径运行 java。

运行“which java”以找出完整路径。

【讨论】:

    【解决方案3】:

    我使用以下代码来启动我的 GUI 应用程序:

    EventQueue.invokeLater(new Runnable() {
        @Override
        public void run() {
            Main m = new Main();
            m.setVisible(true);
        }
    });
    

    删除这个,解决了这个问题。有什么想法吗?

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-12-18
      • 1970-01-01
      • 2018-06-19
      • 1970-01-01
      • 1970-01-01
      • 2013-04-20
      相关资源
      最近更新 更多