Java 使用JCL(JarClassLoader)加载jar文件:忽略清单中的类路径
我尝试使用以下代码加载jar文件Java 使用JCL(JarClassLoader)加载jar文件:忽略清单中的类路径,java,classloader,Java,Classloader,我尝试使用以下代码加载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.tes
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
它似乎忽略了类路径:。
,当我显式地使用Java运行它时,这个jar文件运行良好,这只是一个测试,实际上这个jar文件是作为输入流来的,它不能存储在文件系统中,我如何克服这个问题,有什么解决方法吗
谢谢你的帮助
日期:
下面是一个jarMain
类:
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);
}
}
确保清单以换行符结尾,否则最后一行可能无法正确解析。此外,如果您的jar文件不需要外部资源,则可能不需要指定类路径条目。如果外部jar文件和目录中存在所需资源,则可能只需要指定类路径。以下是来自以下方面的示例:
我们希望将MyUtils.jar中的类加载到类路径中,以便在MyJar.jar中使用。这两个JAR文件位于同一目录中
我们首先创建一个名为Manifest.txt的文本文件,其中包含以下内容:
Class-Path: MyUtils.jar
确保清单以换行符结尾,否则最后一行可能无法正确解析。此外,如果您的jar文件不需要外部资源,则可能不需要指定类路径条目。如果外部jar文件和目录中存在所需资源,则可能只需要指定类路径。以下是来自以下方面的示例:
我们希望将MyUtils.jar中的类加载到类路径中,以便在MyJar.jar中使用。这两个JAR文件位于同一目录中
我们首先创建一个名为Manifest.txt的文本文件,其中包含以下内容:
Class-Path: MyUtils.jar
highmark.test.Main
的外观如何?具体来说,test
方法是什么样子?@aioobe:我已经更新了我的问题,我认为jar不是问题,因为它可以独立运行并且运行良好highmark.test.Main
看起来怎么样?具体来说,test
方法看起来怎么样?@aioobe:我已经更新了我的问题,我认为jar不是问题所在,因为它可以独立运行并且运行良好