To get the java version I run this in bash (what I really want is 1.8 or 1.8.0_171)
$ java -version
java version "1.8.0_171"
Java(TM) SE Runtime Environment (build 1.8.0_171-b11)
Java HotSpot(TM) 64-Bit Server VM (build 25.171-b11, mixed mode)
In my test script just getting the first line would be OK so I execute this:
java -version | grep java
echo return is $?
which returns this:
java version "1.8.0_171"
Java(TM) SE Runtime Environment (build 1.8.0_171-b11)
Java HotSpot(TM) 64-Bit Server VM (build 25.171-b11, mixed mode)
return is 1
According to the man page grep's return indicates it had no errors but found no matches even so the results from "java -version" are printed.
I've tried grep with a few different search patterns and have tried sed and aux, using Google for help, as well with the same results.
What am I doing wrong?
java -version writes to standard error, not standard output, so grep isn't receiving any input.
java -version 2>&1 | grep java
should do what you expect.
Related
I tried this but got no result -
$ java -XX:+PrintFlagsFinal -version | grep UnlockExperimentalVMOptions
openjdk version "1.8.0_265"
OpenJDK Runtime Environment (build 1.8.0_265-8u265-b01-0ubuntu2~20.04-b01)
OpenJDK 64-Bit Server VM (build 25.265-b01, mixed mode)
Is the flag UnlockExperimentalVMOptions removed or
Am I doing something wrong or what??
UnlockExperimentalVMOptions is itself an experimental VM option :)
To see it in the list of flags, use -XX:+UnlockExperimentalVMOptions
java -XX:+UnlockExperimentalVMOptions -XX:+PrintFlagsFinal -version | grep UnlockExperimentalVMOptions
bool UnlockExperimentalVMOptions := true {experimental}
openjdk version "1.8.0_265"
OpenJDK Runtime Environment (build 1.8.0_265-b01)
OpenJDK 64-Bit Server VM (build 25.265-b01, mixed mode)
BTW, there is a great project by Chris Newland - VM Options Explorer
I have a shell script on the Mac which looks for javaw. i.e.:
#!/bin/sh
javaw -version 2> /dev/null
if [ $? == 0 ]; then
javaw -jar some.jar
else
echo "Java Runtime not installed or JRE executable not in PATH"
fi
but it gives this error when I run it:
Java Runtime not installed or JRE executable not in PATH
Clearly it can't find javaw. So, my question is - where is javaw on Mac OS X [Version 10.10.2 (14C109)]?
==== UPDATE
Java is installed. e.g:
$ java -version
java version "1.7.0_45"
Java(TM) SE Runtime Environment (build 1.7.0_45-b18)
Java HotSpot(TM) 64-Bit Server VM (build 24.45-b08, mixed mode)
mac or linux: java -jar xxx.jar &
win: javaw -jar xxx.jar
I have searched several ways to change JDK version on mac.
$/usr/libexec/java_home
And I got
/Library/Java/JavaVirtualMachines/jdk1.8.0_31.jdk/Contents/Home
I tried
$export JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk1.8.0_31.jdk/Contents/Home
also tried
/usr/libexec/java_home 1.8.0_31 --exec javac -version
then I run
$echo $JAVA_HOME
/Library/Java/JavaVirtualMachines/jdk1.8.0_31.jdk/Contents/Home
then I re-check java -version
$java -version
java version "1.7.0_67"
Java(TM) SE Runtime Environment (build 1.7.0_67-b01)
Java HotSpot(TM) 64-Bit Server VM (build 24.65-b04, mixed mode)
How I can really change java -version on my mac.
To set Java to 1.8 for your shell environment, put this in your ~/.bash_profile:
export JAVA_HOME=`/usr/libexec/java_home -v 1.8`
Solution without 3rd party tools:
leave all JDKs at their default location, under /Library/Java/JavaVirtualMachines. The system will pick the highest version by default.
To exclude a JDK from being picked by default, rename its Contents/Info.plist to Info.plist.disabled. That JDK can still be used when $JAVA_HOME points to it, or explicitly referenced in a script or configuration. It will simply be ignored by system's java command.
System launcher will use the JDK with highest version among those that have an Info.plist file.
When working in a shell with alternate JDK, pick your method among existing answers (jenv, or custom aliases/scripts around /usr/libexec/java_home, etc).
ubuntu#ubuntu:~$ hadoop -version
java version "1.8.0_20"
Java(TM) SE Runtime Environment (build 1.8.0_20-b26)
Java HotSpot(TM) 64-Bit Server VM (build 25.20-b23, mixed mode)
After running this command, I get this. Unable to crack the problem. Checked all the entries in /.bashrc file. Please help.
I'm being very confused by the following happening in my terminal:
my-computer:~$ which java
/usr/bin/java
my-computer:~$ java -version
java version "1.6.0_65"
Java(TM) SE Runtime Environment (build 1.6.0_65-b14-462-11M4609)
Java HotSpot(TM) 64-Bit Server VM (build 20.65-b04-462, mixed mode)
my-computer:~$ sudo su
Password:
my-computer:/Users/paulhabfast$ which java
/usr/bin/java
my-computer:/Users/paulhabfast$ java -version
java version "1.7.0_45"
Java(TM) SE Runtime Environment (build 1.7.0_45-b18)
Java HotSpot(TM) 64-Bit Server VM (build 24.45-b08, mixed mode)
Can anyone explain me what is going on?
The way I understand it so far is that when I switch from the current user to the root user, I'm being served a different executable?
I'm running Mac OSX 10.9, but I thought I had a pretty standard unix environment.
Is there any additional information I can give?
/usr/bin/java is a wrapper that looks at your environment variables, try env to see these variables, for example JAVA_HOME.