解决在安装了jdk1.6.0_26,又安装JDK1.8.2后导致iReport无法启动加载的问题

原文:http://fengjianquan9527.iteye.com/blog/2110280


今天在想再次复习体验一下JDK1.8的新特性,机器上已经安装了jdk1.6.0_26之,现有的工程是基于1.6的的,不想卸载,于是就直接安装了JDK1.8.2,为了避免冲突。直接将JAVA_HOME跟踪到/java/jdk1.6.0_26这一级目录,CLASSPATH、PATH直接写死了,分别给出绝对路径。新的Eclipse 4.4 LuNa启动没问题,但是iReport就不行了,光出现加载窗口,接着就一闪而过,无法正常启动加载。

解决办法:

类比于其他工具,工具自身的JDK应该都有一个配置文件的。于是乎,稍微研究一下ireport的目录结构,在bin目录下有个ireport的批处理文件,里面N多次的调用${jdkhome}这个变量,证明其他配置文件肯定有这个变量的配置,仔细研究,我们不难发现在etc目录下有一个ireport.conf,打开便发现有一个jdkhome的行被注释掉了,这很显然,应该是启用系统环境变量中的JDK_HOME,但是我环境中。于是乎,抱着试试看的态度,直接将这个jdkhome写死我的jdk1.6.0_26地址。然后启动,一切正常。

心有不甘,JDK1.8应该是向下兼容的啊,jdk1.6能启动,jdk1.8应该也可以的,于是乎将jdkhome改成了JDK1.8的绝对路径,启动ireport无法启动。不知道为什么,可能是ireport自身的问题。

附上我本地配置文件:

ireport.conf:

jdkhome="D:\Program Files\Java\jdk1.6.0_26"

JAVA_HOME:

D:\Program Files\Java\jdk1.6.0_26

CLASSPATH:

D:\Program Files\Java\jre6\lib;

ireport批处理:

#!/bin/sh

#

# resolve symlinks

#

PRG=$0

while [ -h "$PRG" ]; do

ls=`ls -ld "$PRG"`

link=`expr "$ls" : '^.*-> \(.*\)$' 2>/dev/null`

if expr "$link" : '^/' 2> /dev/null >/dev/null; then

PRG="$link"

else

PRG="`dirname "$PRG"`/$link"

fi

done

progdir=`dirname "$PRG"`

APPNAME=`basename "$0"`

if [ -f "$progdir/../etc/$APPNAME".conf ] ; then

. "$progdir/../etc/$APPNAME".conf

fi

# XXX does not correctly deal with spaces in non-userdir params

args=""

case "`uname`" in

Darwin*)

userdir="${default_mac_userdir}"

;;

*)

userdir="${default_userdir}"

;;

esac

while [ $# -gt 0 ] ; do

case "$1" in

--userdir) shift; if [ $# -gt 0 ] ; then userdir="$1"; fi

;;

*) args="$args \"$1\""

;;

esac

shift

done

if [ -f "${userdir}/etc/$APPNAME".conf ] ; then

. "${userdir}/etc/$APPNAME".conf

fi

if [ -n "$jdkhome" -a \! -d "$jdkhome" -a -d "$progdir/../$jdkhome" ]; then

# #74333: permit jdkhome to be defined as relative to app dir

jdkhome="$progdir/../$jdkhome"

fi

readClusters() {

if [ -x /usr/ucb/echo ]; then

echo=/usr/ucb/echo

else

echo=echo

fi

while read X; do

if [ "$X" \!= "" ]; then

$echo "$progdir/../$X"

fi

done

}

clusters=`(cat "$progdir/../etc/$APPNAME".clusters; echo) | readClusters | tr '\012' ':'`

if [ ! -z "$extraclusters" ] ; then

clusters="$clusters:$extraclusters"

fi

nbexec=`echo "$progdir"/../platform*/lib/nbexec`

case "`uname`" in

Darwin*)

eval exec sh '"$nbexec"' \

--jdkhome '"$jdkhome"' \

-J-Dcom.apple.mrj.application.apple.menu.about.name='"$APPNAME"' \

-J-Xdock:name='"$APPNAME"' \

'"-J-Xdock:icon=$progdir/../../$APPNAME.icns"' \

--clusters '"$clusters"' \

--userdir '"${userdir}"' \

${default_options} \

"$args"

;;

*) 

sh=sh

# #73162: Ubuntu uses the ancient Bourne shell, which does not implement trap well.

if [ -x /bin/bash ]

then

sh=/bin/bash

fi

eval exec $sh '"$nbexec"' \

--jdkhome '"$jdkhome"' \

--clusters '"$clusters"' \

--userdir '"${userdir}"' \

${default_options} \

"$args"

exit 1

;;

esac


你可能感兴趣的:(解决在安装了jdk1.6.0_26,又安装JDK1.8.2后导致iReport无法启动加载的问题)