我有一个奇怪的情况。我的代码未在OpenJDK 1.6上使用MANIFEST.MF
加载getResourceAsStream()
。在Oracle JDK 1.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
JAvA_HOME
和PATH
JAVA_HOME
设置和PATH
设置为java
。打开JDK(未设置备用JAVA_HOME / PATH):
$ echo "$JAVA_HOME" ; which java
/usr/bin/java
Sun JDK设置:
$ echo "$JAVA_HOME" ; which java
/usr/local/jdk
/usr/local/jdk/bin/java
如果为OpenJDK正确定义了JAVA_HOME
(默认情况下),则它是相同的。
$ echo "$JAVA_HOME" ; which java
/usr/java
/usr/bin/java
因此,它与我帐户中的空JAVA_HOME
无关。
答案 0 :(得分:0)
我没有使用过openJDK 6,也许为答案为时已晚,但是我遇到了同样的问题,但使用的是JDK 1.7.0.2。我看到你正在使用maven
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<configuration>
<archive>
<manifest>
<mainClass>net.noorg.test.Main</mainClass>
<addClasspath>true</addClasspath>
<classpathPrefix>classes/META-INF/lib</classpathPrefix>
</manifest>
</archive>
</configuration>
</plugin>
这就是我运行它的方式,我强烈建议你不要使用openJDK6,我认为随着JDK 7的到来,你可以做很多事情而且没有错误风险和更好的安全性能。