gpt4 book ai didi

java - JAR 入口点实际上必须在 JAR 内部吗?

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:42:34 24 4
gpt4 key购买 nike

一点背景

我正在尝试设计一个带有启动器的最小框架,这对多个项目都是通用的。然而,在运行 JAR 时我遇到了困难。

我的目的是有一个自给自足的java -jar命令:MANIFEST 知道类路径和入口点。微妙的一点是:因为我希望启动器对所有项目都是通用的,并且要符合 DRY,所以我有一个特定的 JAR,它总是在类路径上。

现在,我无法启动我的 jar:

java -jar test.jar

应该从 list 中加载类路径和入口点。它确实找到了 list ,但我最终得到了 Could not find or load main class .

使用更明确的细节启动确实有效:

java -cp test.jar;lib/* org.keyboardplaying.test.TestLauncher

我的问题

我没有找到任何说明它是否可能的规范,这不是标准情况,但是我可以在我的 MANIFEST.MF 中指定一个入口点,该入口点将在类路径上找到但不是包含在我的 JAR 中?


更多细节

我的 list .MF

Manifest-Version: 1.0
Archiver-Version: Plexus Archiver
Created-By: Apache Maven
Built-By: Chop
Build-Jdk: 1.7.0_45
Main-Class: org.keyboardplaying.test.TestLauncher
Class-Path: lib/slf4j-api-1.7.12.jar lib/logback-classic-1. 1.3.jar lib/logback-core-1.1.3.jar

有问题的人注意事项

  • 我之前尝试过 Class-Path: lib/*我更喜欢它,但是您不能在 Manifest1 中对类路径使用通配符。您仍然可以使用目录,但类加载器不会检查此目录中的 jar 内容。

<子>1。其中一个来源:https://stackoverflow.com/a/4756762/1734119
<子>2。 list 类路径条目的非常有趣的链接:http://todayguesswhat.blogspot.com/2011/03/jar-manifestmf-class-path-referencing.html

最佳答案

Does the JAR entry point actually have to be inside the JAR?

不,它没有。将启动器放入单独的 jar 文件中是完全合理的,只要它在 list 指定的类路径中,就应该没问题。这是一个例子:

启动\Launchable.java:

package launch;

public interface Launchable {
void launch();
}

启动\Launcher.java:

package launch;

public class Launcher {
public static void main(String[] args) throws Exception {
System.out.println("I am the launcher!");
Class<?> clazz = Class.forName(args[0]);
Launchable launchable = (Launchable) clazz.newInstance();
launchable.launch();
}
}

演示\测试.java:

package demo;

import launch.Launchable;

public class Test implements Launchable {
public void launch() {
System.out.println("I am Test, being launched");
}
}

list .txt:

Manifest-Version: 1.0
Main-Class: launch.Launcher
Class-Path: launcher.jar

现在编译运行:

$ javac -d . launcher/*.java
$ javac -d . demo/*.java
$ jar cvf launcher.jar launcher
$ jar cvfm demo.jar manifest.txt demo
$ java -jar demo.jar demo.Test
I am the launcher!
I am Test, being launched

关于java - JAR 入口点实际上必须在 JAR 内部吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31473188/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com