gpt4 book ai didi

java - 使用JCL(JarClassLoader)加载jar文件: classpath in manifest is ignored

转载 作者:太空宇宙 更新时间:2023-11-04 08:53:39 26 4
gpt4 key购买 nike

我正在尝试使用JCL加载jar文件使用以下代码

FileInputStream fis = new FileInputStream(new File( "C:\\Users\\sunils\\glassfish-tests\\working\\test.jar") );
JarClassLoader jc = new JarClassLoader( );
jc.add(fis);
Class main = jc.loadClass( "highmark.test.Main" );
String[] str={};

main.getMethod("test").invoke(null);//.getDeclaredMethod("main",String[].class).invoke(null,str);
fis.close();

但是当我尝试运行这个程序时,我得到了异常

Exception in thread "main" java.lang.reflect.InvocationTargetException
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at Main.main(Main.java:21)
Caused by: java.lang.RuntimeException: Embedded startup not found, classpath is probably incomplete
at org.glassfish.api.embedded.Server.<init>(Server.java:292)
at org.glassfish.api.embedded.Server.<init>(Server.java:75)
at org.glassfish.api.embedded.Server$Builder.build(Server.java:185)
at org.glassfish.api.embedded.Server$Builder.build(Server.java:167)
at highmark.test.Main.test(Main.java:33)
... 5 more

据此,它无法找到类,但是当我显式运行 jar 文件时,它运行良好。 JCL 似乎忽略了 jar 文件中存在的其他类,

jar 文件中的

MANIFEST.MF 文件显示:

Manifest-Version: 1.0
Class-Path: .
Main-Class: highmark.test.Main

它似乎忽略了 Class-Path: . ,当我使用 Java 显式运行它时,这个 jar 文件运行良好,这只是一个测试,实际上这个 jar 文件作为 InputStream 出现,并且无法存储在文件系统中,我该如何克服这个问题,有什么解决方法吗?

感谢您的帮助。

取消日期:这是一个 jar Main 类:

package highmark.test;
import org.glassfish.api.embedded.*;

import java.io.*;

import org.glassfish.api.deployment.*;

import com.sun.enterprise.universal.io.FileUtils;
public class Main {
public static void main(String[] args) throws IOException, LifecycleException, ClassNotFoundException {
test();
}
public static void test() throws IOException, LifecycleException, ClassNotFoundException{

Server.Builder builder = new Server.Builder("test");

Server server = builder.build();
server.createPort(8080);
ContainerBuilder containerBuilder = server.createConfig(ContainerBuilder.Type.web);
server.addContainer(containerBuilder);
server.start();


File war=new File("C:\\Users\\sunils\\maventests\\simple-webapp\\target\\simple-webapp.war");//(File) inputStream.readObject();
EmbeddedDeployer deployer = server.getDeployer();
DeployCommandParameters params = new DeployCommandParameters();
params.contextroot = "simple";
deployer.deploy(war, params);
}
}

最佳答案

确保 list 以换行符结尾,否则最后一行可能无法正确解析。另外,如果您的 jar 文件不需要外部资源,则可能不需要指定类路径条目。如果外部 jar 文件和目录中有所需的资源,您可能只需要指定类路径。这是 tutorials 中的示例:

We want to load classes in MyUtils.jar into the class path for use in MyJar.jar. These two JAR files are in the same directory.

我们首先创建一个名为 Manifest.txt 的文本文件,其中包含以下内容:

Class-Path: MyUtils.jar

关于java - 使用JCL(JarClassLoader)加载jar文件: classpath in manifest is ignored ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2797736/

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