繁体   English   中英

如何在同一罐子中设置Class-Path指示罐子

[英]How to set Class-Path indict jar in the same jar

我想创建一个包含所有依赖项的Complete Single Jar球,因此可以将其运送到从命令行使用它的任何人。

我的罐子的结构是:

├── META-INF
│   ├── MANIFEST.MF
│   └── maven
│       └── com.cn.xing.jar
│           └── CnJar
│               ├── pom.properties
│               └── pom.xml
├── com
│   └── cn
│       └── xing
│           └── jar
│               ├── HelloJava.class
│               └── InjectEntry.class
├── lib
│   ├── aopalliance-1.0.jar
│   ├── commons-codec-1.6.jar
│   ├── commons-logging-1.1.3.jar
│   ├── gson-2.2.4.jar
│   ├── httpclient-4.3.5.jar
│   ├── httpcore-4.3.2.jar
│   ├── spring-aop-3.2.2.RELEASE.jar
│   ├── spring-beans-3.2.2.RELEASE.jar
│   ├── spring-context-3.2.2.RELEASE.jar
│   ├── spring-core-3.2.2.RELEASE.jar
│   └── spring-expression-3.2.2.RELEASE.jar
└── spring
    └── appCtx.xml

清单文件的内容为:

Manifest-Version: 1.0
Built-By: ChinaXing
Build-Jdk: 1.7.0_65
Class-Path: lib/spring-context-3.2.2.RELEASE.jar lib/spring-aop-3.2.2.
 RELEASE.jar lib/aopalliance-1.0.jar lib/spring-beans-3.2.2.RELEASE.ja
 r lib/spring-core-3.2.2.RELEASE.jar lib/spring-expression-3.2.2.RELEA
 SE.jar lib/httpclient-4.3.5.jar lib/httpcore-4.3.2.jar lib/commons-lo
 gging-1.1.3.jar lib/commons-codec-1.6.jar lib/gson-2.2.4.jar
Created-By: Apache Maven 3.2.2
Main-Class: com.cn.xing.jar.InjectEntry
Archiver-Version: Plexus Archiver

但是当我在命令行中执行以下命令时:

java -jar ../CnJar-1.0-SNAPSHOT.jar

它显示了例外情况:

Exception in thread "main" java.lang.NoClassDefFoundError: org/springframework/context/ApplicationContext
    at java.lang.Class.getDeclaredMethods0(Native Method)
    at java.lang.Class.privateGetDeclaredMethods(Class.java:2688)
    at java.lang.Class.getMethod0(Class.java:2937)
    at java.lang.Class.getMethod(Class.java:1771)
    at sun.launcher.LauncherHelper.validateMainClass(LauncherHelper.java:544)
    at sun.launcher.LauncherHelper.checkAndLoadMain(LauncherHelper.java:526)
Caused by: java.lang.ClassNotFoundException: org.springframework.context.ApplicationContext
    at java.net.URLClassLoader$1.run(URLClassLoader.java:372)
    at java.net.URLClassLoader$1.run(URLClassLoader.java:361)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(URLClassLoader.java:360)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
    ... 6 more

这意味着找不到Spring jar。

所以我想知道如何让Jvm classLoader在jar的lib目录中找到jar?

默认类加载器将不处理这种情况。 您可以 :

  1. 自己编写类加载器以处理这种情况
  2. 重新打包所有jar(请参阅maven-shade-plugin,maven jarja插件)
  3. http://one-jar.sourceforge.net

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM