5

次のように、メインクラスがなくてもjarファイルを実行できますか?

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

getXというメソッドがあり、引数としてarg1arg2...を使用していることがわかります。何か案が?

4

7 に答える 7

3

mainメソッドが必要です。

mainの署名は次のとおりである必要があります。

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

したがって、mainメソッド内でメソッドgetXを呼び出すことができます。

于 2013-03-27T11:32:00.397 に答える
3

簡単な答えはノーです...しかし...

これは、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
于 2013-03-27T11:54:11.940 に答える
0

mainメソッドを持つクラスが少なくとも1つあるはずです

于 2013-03-27T11:32:10.047 に答える
0

メソッドを引数として渡すだけでは実行できません。引数を解析する必要があります。必要なメソッドを実行するために引数を自分で解釈する場合-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は実行を開始するためのエントリポイントを必要とし、これがメインメソッドです。そのような瓶は単なる図書館です。

于 2013-03-27T11:34:13.633 に答える
0

なぜこれが必要なのかはわかりませんが、単体テストプロジェクトを設定し、そこからメソッドを呼び出すことができます。これにより、(明示的な)Mainメソッドを使用せずに、(一種の)メソッドを実行できるようになります。

ただし、テストランナーには(暗黙的な?)Mainメソッドが含まれます。これは、メソッドを実行するためのエントリポイントになります。

于 2013-03-27T11:35:27.990 に答える
0

""を使用してjarを実行する場合java -jarは、メインクラスを定義する必要があります。この方法で実行できるjarのmainメソッドを定義するmainクラスが必要になります。

ただし、次の構文を使用して、jar内でクラスを実行できます(メインメソッドがある場合)。

java -classpath my_jar.jar com.project.MyClass
于 2013-03-27T11:38:59.283 に答える
0

jarに動的にリンクし、そこからメソッドを呼び出すプロキシjarを作成できます。ただし、プロキシjarにはmainメソッドを持つクラスが必要です。

于 2013-03-27T11:47:17.877 に答える