I'm pulling my hair out with the Sun JDK installation on Fedora 7.
Recently, I decided to explore java and downloaded their product,
followed all the directions (used the rpm.bin installation since I'm
to lazy to compile softaware). Downloaded their "HelloWorld" app and
tried to run it and am getting the apparently very common error below:
(did javac HelloWorld.java 1st to creat the HelloWorld.class file)
[congo@localhost java]$ java HelloWorldApp
Exception in thread "main" java.lang.ClassFormatError: HelloWorldApp
(unrecognized class file version)
at java.lang.VMClassLoader.defineClass(libgcj.so.8rh)
at java.lang.ClassLoader.defineClass(libgcj.so.8rh)
at java.security.SecureClassLoader.defineClass(libgcj.so.8rh)
at java.net.URLClassLoader.findClass(libgcj.so.8rh)
at gnu.gcj.runtime.SystemClassLoader.findClass(libgcj.so.8rh)
at java.lang.ClassLoader.loadClass(libgcj.so.8rh)
at java.lang.ClassLoader.loadClass(libgcj.so.8rh)
at gnu.java.lang.MainThread.run(libgcj.so.8rh)
All documentation on Sun's website and posts I found in this newsgroup
point to updating the CLASSPATH. So I did that in my .bash_profile
file, get the same error. Found the below documentation in the
newsgroup circa 2003:
set JAVA_HOME=/usr/java
set CLASSPATH .;/usr/java/jdk1.6.0_02
export JAVA_HOME CLASSPATH
Did this as root thinking I'd be smart and set the CLASSPATH system
wide even though I'm the only user. At the bottom of that 2003 thread
another guy said that CLASSPATH hasn't been used for years and that I
should just set the PATH in /etc/profile. That's when I stopped and
posted this message. There's a lot of great info/help on how to fix
this problem, but it seems to be taking me further and further into
the forest where I am now lost. Can anyone assist?
v\r
Congo
> set JAVA_HOME=/usr/java
Is Java really in /usr/java? You should check that it is really there.
> set CLASSPATH .;/usr/java/jdk1.6.0_02
> export JAVA_HOME CLASSPATH
>
> Did this as root thinking I'd be smart and set the CLASSPATH system
> wide even though I'm the only user. At the bottom of that 2003 thread
I'm not sure I understand what you mean when you say you did it as
root. If you opened up a shell window, and did the above, it will
only affect that shell. If you were root, set it, and logged out,
you will lose those settings once logging out.
As yourself, echo the JAVA_HOME variable:
echo $JAVA_HOME
to make sure it has been set.
> another guy said that CLASSPATH hasn't been used for years and that I
> should just set the PATH in /etc/profile. That's when I stopped and
> posted this message. There's a lot of great info/help on how to fix
> this problem, but it seems to be taking me further and further into
> the forest where I am now lost. Can anyone assist?
The first step is to echo $JAVA_HOME. It sounds like your $PATH variable
is set since you can call javac with no issues.
Yea, it has been a long time since I have had to set CLASSPATH to get
Java to work. I only set it so Java can find external packages.
I also haven't manually set up Java on Linux in years - the installation
package does it all for me now days. The global environmental variables set
for everyone are in /etc/profile.d for my distro:
export JAVA_HOME=/usr/lib/java
export MANPATH="$MANPATH:/usr/lib/java/man"
export PATH="$PATH:/usr/lib/java/bin:/usr/lib/java/jre/bin"
- Kurt
> point to updating the CLASSPATH. So I did that in my .bash_profile
> file, get the same error. Found the below documentation in the
> newsgroup circa 2003:
>
> set JAVA_HOME=/usr/java
> set CLASSPATH .;/usr/java/jdk1.6.0_02
> export JAVA_HOME CLASSPATH
>
> Did this as root thinking I'd be smart and set the CLASSPATH system
> wide even though I'm the only user. At the bottom of that 2003 thread
> another guy said that CLASSPATH hasn't been used for years and that I
> should just set the PATH in /etc/profile. That's when I stopped and
> posted this message. There's a lot of great info/help on how to fix
> this problem, but it seems to be taking me further and further into
> the forest where I am now lost. Can anyone assist?
My guess is the following:
You installed a recent JDK, and that's where you're running javac from.
There was already a JRE on the machine, and that's where you're running java
from. This JRE is an older version than the JDK you ust installed, so it
can't read the class files that the JDK produces.
You should be able to verify this using "which" (or "whence"). Just ensure
that the java executable you're running comes from the JDK (i.e. from the
same bin directory thata javac lives in), and you shouild be fine.
CLASSPATH and PATH are two entirely different things. One roots the search
for Java .class files, the other for Linux executables.
The .bash_profile script you show is not bash. Maybe it's csh?
Paths in Linux (UNIX) are separated by colons, not semicolons. Furthermore,
it's usually better not to set CLASSPATH as it obscures what is going on.
Instead, use the "-cp" (same effect as "-classpath") option to the java
command (or the corresponding Ant target).
Furthermore, /usr/java/jdk1.6.0_02/ is not the root of any class path, so even
if you do have a CLASSPATH you wouldn't include that path element.
Your profile should look more like:
export JAVA_HOME=/usr/java
# export CLASSPATH=.
# the default CLASSPATH is the current working directory anyway
These are better placed in /etc/profile than in a user profile.
Another choice is to use the Linux "alternatives" mechanism to allow multiple
Java versions to coexist peacefully.
--
Lew
~kurt wrote:
> Is Java really in /usr/java? You should check that it is really there.
con...@gmail.com wrote:
>> set CLASSPATH .;/usr/java/jdk1.6.0_02
You installed your JDK into /usr/java/jdk1.6.0_02/, right? That's JAVA_HOME.
--
Lew
Thanks to all of you for responding so quickly, I'll give it a shot
and see what happens,
Congo
Yes I did install it in this directory, still having problems. Have
busted java in Mozilla now as well,
Congo
Congo
> On Aug 8, 11:52 pm, cong...@gmail.com wrote:
>> On Aug 5, 5:25 pm, Lew <l...@lewscanon.nospam> wrote:
>>
>> > cong...@gmail.com wrote:
>> > >> set JAVA_HOME=/usr/java
>> > ~kurt wrote:
>> > > Is Java really in /usr/java? You should check that it is really there.
>> > cong...@gmail.com wrote:
>> > >> set CLASSPATH .;/usr/java/jdk1.6.0_02
>>
>> > You installed yourJDKinto /usr/java/jdk1.6.0_02/, right? That's
JAVA_HOME.
>>
>> > --
>> > Lew
>>
>> Yes I did install it in this directory, still having problems. Have
>> busted java in Mozilla now as well,
>>
>> Congo
> Ok, it's official, I'm completely lost. Nothing I do is working. From
> what I think I know, Fedora 7 must come with an installation of Java,
It comes with a "Java" installation of sorts, whether you choose to call it Java
is moot. The Fedora packagers are a tad retentive about *everything* having to
be FOSS so won't ship Sun Java even if it makes their distro. worse for it.
Whatever you do, do not enable the gcj browser plugin (gcjwebplugin) - AFAIK it
still has no sandbox, and even if it does I wouldn't trust it yet.
> by me installing the JDK & JRE packages from Sun, I've confused my
> system/me as to how to use Java.
Yep, that is quite a normal state for users of Java on Fedora.
> I've followed the advise here as well
> as re-read Sun's documentation and nothing is producing results.
Unfortunately Sun cannot take account of the idiosyncrasies (and idiocies) of
each and every Linux distro. They provide a binary installer which just unpacks
the JDK into a directory and leaves the rest up to you, that is often the best
option. They also provide some packaged installers for some distros, which
unfortunately have side effects in some cases. Fedora being a prime example.
See:
http://liquidat.wordpress.com/2007/05/31/howto-sun-java-on-fedora-7/
http://fedoraproject.org/wiki/JavaFAQ.
--
Nigel Wade, System Administrator, Space Plasma Physics Group,
University of Leicester, Leicester, LE1 7RH, UK
E-mail : n...@ion.le.ac.uk
Phone : +44 (0)116 2523548, Fax : +44 (0)116 2523555
I think this person is onto something. Sometimes it's possible to get
yourself into a bind when there is a preceding JRE before you install
the one you really want. A few things I'd do in your situation:
which -a java
which -a javac
echo $PATH
java -version
The stacktrace you're getting appears to indicate a version problem
(class files being of a later spec version than what the JVM is able
to run). From what you've said, I gather your current install is
version 1.6.0, which as of now should be able to handle any class
specification. That tells me that when you invoke "java", you're
actually running an older JVM. This could be due to your PATH
pointing to some Fedora's own older JVM perhaps or something that was
on that system previously, maybe a JVM that came with a browser.
Either way, outputting your PATH will let you know how the system is
searching for that executable. "which -a" will tell you all the java
executables it's finding now. Maybe your JAVA_HOME is not being used
as part of PATH. Maybe it's being obscured by this older JVM ghost.
Thanks to Nigel and Alexey!
Alexey, yes I did install 1.6.0 and I have discovered that through my
own debacles I was running the GNU Java that comes with Fedora. Really
screwed things up.
Nigel, fantastic website, haven't gotten it fixed yet but am making
the corrections because of the libodbc.so and mkfontdir errors. Will
post when I have succeeded. Basically I seem to be headed in the right
direction,
Congo
> Alexey, yes I did install 1.6.0 and I have discovered that through my
> own debacles I was running the GNU Java that comes with Fedora. Really
> screwed things up.
Yes, I use Ubuntu on the desktop and CentOS on the servers I maintain, and
both install GNU Classpath. They can't ship Sun's JRE due to licensing issues.
I uninstalled the GNU stuff on my personal CentOS server and installed a Sun
JDK, but uninstalling GNU's runtime means I also have to install Ubuntu's
stock OpenOffice.org packages, and I need OOo to do my daily work... I am
probably going to uninstall the GNU stuff anyhow, but I have to assess how much
extra work will be required...
Sun changed that with a special Distributor License for Java (DLJ)
this spring. Ubuntu was one of the first ones to make use of this
license.
Search for sun-java in synaptic. Install what you want. After
installation run update-java-alternatives as root to select the
default Java version in case you have multiple ones installed. E.g.
GNU and Sun Java 5 and 6.
List all installed Java alternatives:
update-java-alternatives -l
Select one alternative
update-java-alternatives -s <name as given by -l>
> I uninstalled the GNU stuff on my personal CentOS server and installed a Sun
> JDK, but uninstalling GNU's runtime means I also have to install Ubuntu's
> stock OpenOffice.org packages, and I need OOo to do my daily work... I am
> probably going to uninstall the GNU stuff anyhow, but I have to assess how much
> extra work will be required...
No need to uninstall anything.
AAAAAHHHHHHHHH, thank you!
I have absolutely nothing against GNU, in fact I use GNU software all
the time, but I'd prefer to run Sun's Java VM. And I knew the Sun
packages were available because I've checked Synaptic, but I didn't
know I could change the default JRE.