执行不带main的jar



我可以在没有主类的情况下执行jar文件吗?

java -jar my_jar.jar -getX arg1 arg2 ...

知道我有一个叫做getX的方法,带arg1 arg2…作为参数。任何想法?

必须有一个main方法

main的签名需要是:

public static void main(String[] args){
    // Insert code here
}

因此,你可以在主方法中调用getX方法。

简短的回答是no…but…

在调用jar时,可以使用以下技术在命令行上传递方法名和参数。本示例将以方法名作为第一个参数。根据需要进行调整并添加错误检查/处理。

package com.charles.example;
import java.lang.reflect.Method;
public class MethodRouter {
public void myMethod(final String[] args) {
    System.out.println("Amazing!! " + args[1]);
}
public static void main(String[] args) throws Exception {
    if (args.length == 0) {
        args = new String[2];
        args[0] = "myMethod";
        args[1] = "yoyo-yada-bla";
    }
    final MethodRouter methodRouter = new MethodRouter();
    final Class<?>[] types = { String[].class };
    final Class<?> _class = methodRouter.getClass();
    final String methodName = args[0];
    final Method _method = _class.getDeclaredMethod(methodName, types);
    if (_method != null) {
        _method.invoke(methodRouter, new Object[] { args });
    }
}
}
输出:

Amazing!! yoyo-yada-bla

应该至少有一个类具有主方法

不确定为什么要这样做,但是您可以设置一个Unit Test项目,并从中调用您的方法。这应该(在某种程度上)允许你执行这些方法,而不需要一个(显式的)Main方法。

您的测试运行程序仍将包含一个(隐式的?)Main方法,它将成为方法执行的入口点。

如果要使用" java -jar "执行jar,则需要定义一个主类。你需要一个main类来定义main方法,这样jar才能执行。

但是,您可以在jar中执行类(如果它们有main方法),使用以下语法:
java -classpath my_jar.jar com.project.MyClass

不能仅仅通过将方法作为参数传递来执行方法。你必须解析你的参数-getX arg1 arg2,它在参数args中传递给你的主方法,如果你自己解释它们来执行你想要的方法。

如果main方法的类不在META-INF/MANIFEST.MF中,就像这样

Manifest-Version: 1.0
Class-Path: .
Main-Class: some.pack.age.MainClass

则可以指定它(完全限定)作为第一个参数。

java -cp my_jar.jar some.pack.age.MainClass -getX arg1 arg2 ...

如果jar中没有main方法的类,那么你就不能执行它。JVM需要一个入口点来开始执行,这是主要的方法。这样的jar就是一个库。

您可以编写一个动态链接到您的jar并从中调用方法的代理jar。代理jar 必须具有main方法的类。

相关内容

  • 没有找到相关文章

最新更新