【问题标题】:calling a function inside a jar file from a script file从脚本文件调用 jar 文件中的函数
【发布时间】:2016-07-07 15:33:46
【问题描述】:

我有一个名为 MyJar.jar 的 jar,其中包含 MyFinder.class。这个类包含一个名为 myFind() 的非静态函数。我想从 shell 脚本调用 myFind()。

我已经知道如何使用 jar 文件中的静态 main() 调用特定类:

java -jar MyJar.jar MyFinder.class

我需要一些像上面这样可以调用非静态函数的命令

主要动机:

我有一个脚本文件,只有一个 jar。 在脚本中,我想根据特定时间进行函数调用。我可以在 jar 内部对其进行编码。但是,如果以后需求发生变化,我必须编辑 jar。我不希望这种情况发生,我只想编辑脚本文件

【问题讨论】:

  • 调用一个非静态函数是没有意义的,因为它们确实属于一个类的实例,当你试图在一个类中启动一个函数作为起点时,你不会拥有它,
  • 1) 是否可能 2) 如果不可能:我是否应该将函数更改为静态并假设它已更改我可以在一个类中有两个可以独立调用的静态方法
  • nfechner 的解决方案是我眼中唯一合理的解决方案。您可能想查看关键字 static 的作用,因为您似乎不知道。

标签: java bash function class jar


【解决方案1】:

这样做的唯一方法是在类中包含一个 main 方法,该方法调用所需的方法:

public static void main(String[] args) {
  MyFinder myFinder = new MyFinder();
  myFinder.myFind();
}

编辑:实际上,这不是唯一的方法,而是唯一实用的方法..

编辑 2: 如果您有多个方法要调用,请将参数传递给方法:

public static void main(String[] args) {
  MyFinder myFinder = new MyFinder();
  if (args.length > 0) {
    switch (args[0]) {
      case "myFind":
        myFinder.myFind();
        break;
      case "methodB":
        myFinder.methodB();
        break;
      default:
        System.err.println("Unkown target");
        break;
    }
  }
}

这样称呼它:java -jar MyJar.jar MyFinder.class myFind

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-12-07
    • 1970-01-01
    • 1970-01-01
    • 2015-11-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多