仅限java OpenJDK:为什么getResourceAsStream()不返回清单。可执行JAR中的MF
我有一个奇怪的情况。我的代码没有在OpenJDK1.6上使用getResourceAsStream()
加载MANIFEST.MF
。在OracleJDK1.6+上,它运行良好。我在OpenJDK上意外运行代码时遇到了这个问题
main()方法:
public static void main(String[] args) throws IOException {
InputStream is = Main.class.getClassLoader().getResourceAsStream("META-INF/MANIFEST.MF");
InputStreamReader isr = new InputStreamReader(is);
char[] c = new char[2048];
int read;
StringBuffer b = new StringBuffer();
while ((read = isr.read(c)) > 0) {
b.append(c, 0, read);
}
System.out.println(b.toString());
}
Maven JAR插件定义:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<configuration>
<archive>
<manifest>
<mainClass>net.noorg.test.Main</mainClass>
<addClasspath>true</addClasspath>
</manifest>
</archive>
</configuration>
</plugin>
使用OpenJDK 1.6:
$ java -version
java version "1.6.0_18"
OpenJDK Runtime Environment (IcedTea6 1.8.7) (6b18-1.8.7-2~squeeze1)
OpenJDK Client VM (build 14.0-b16, mixed mode, sharing)
$ java -jar target/test-load-resource-1.0-SNAPSHOT.jar
Manifest-Version: 1.0
Created-By: 1.6.0_18 (Sun Microsystems Inc.)
使用Sun JDK 1.6:
$ java -version
java version "1.6.0_29"
Java(TM) SE Runtime Environment (build 1.6.0_29-b11)
Java HotSpot(TM) Client VM (build 20.4-b02, mixed mode, sharing)
$ java -jar target/test-load-resource-1.0-SNAPSHOT.jar
Manifest-Version: 1.0
Archiver-Version: Plexus Archiver
Created-By: Apache Maven
Built-By: ABC
Build-Jdk: 1.7.0_07
Main-Class: net.noorg.test.Main
- 谁错了-OpenJDK还是我李>
- 原因是什么李>
- 这是只与清单相关还是会影响所有资源李>
编辑1:
- 两种执行都使用相同的方法。罐子
- Maven正在Oracle JDK 1.7上运行
- 我正在运行一个安装了两个jdk的系统,通过
JAvA_HOME
和PATH
来“定义”它们 - 我在经营这个公司。一台机器上的jar在两个不同的控制台中使用不同的
JAVA_HOME
集和PATH
集java
李>
除上述产出外
打开JDK(未设置可选JAVA\u主目录/路径):
$ echo "$JAVA_HOME" ; which java
/usr/bin/java
Sun JDK套装:
$ echo "$JAVA_HOME" ; which java
/usr/local/jdk
/usr/local/jdk/bin/java
编辑2:
如果为OpenJDK正确定义了JAVA_HOME
(默认情况下),那么它是相同的
$ echo "$JAVA_HOME" ; which java
/usr/java
/usr/bin/java
所以它与我帐户上的空JAVA_HOME
无关
# 1 楼答案
我还没有使用openJDK 6,也许现在回答这个问题已经太迟了,但是我也遇到了同样的问题,只是使用了JDK 1.7.0.2。我看到你在用maven
这就是我可以让它运行的方式,我强烈建议您不要使用openJDK6,我认为随着JDK7的到来,您可以做很多事情,而且不会有错误风险,而且安全性能更好