将 java 入口点设置为位于另一个 JAR 中的 JAR 中的 class

Set java entrypoint to a class that's in a JAR inside another JAR

我有一个用 One Jar 打包的 JAR,因此它内部包含多个依赖项(使用 JAR URL 表示法):

<one.jar>!/lib/<deps1.jar>
<one.jar>!/lib/<deps2.jar>
...

是否有可能 运行 main() 来自居住在 deps2.jar 的 class com.example.A

我试过 java -cp one.jar!/lib/deps2.jar com.example.A,但没用。

您可以在委托给 com.example.A.main() 的主 .jar 中的某处包含一个 main()。这将为您提供您所寻求的行为,只需几行额外的代码......一个小的额外 class 定义文件。例如:

package foo.bar;

import com.example.A;

class MainEntryDelegate {
    public static void main(String... args) {
        com.example.A.main(args);
    }
}

因此您的应用程序将可以通过显而易见的方式运行:

java -cp one.jar foo.bar.MainEntryDelegate

或者如果您已正确设置清单:

java -jar one.jar