JAVA_HOME gives me wrong value on node - java

I have Jenkins node with the below configuration for JavaPath:
/usr/java/jdk1.8.0_131/bin/java
I wrote a simple Jenkins job which prints JAVA_HOME:
#!/bin/ksh
echo "JAVA_HOME=${JAVA_HOME}"
echo $PATH
for some reason, the output I'm getting is:
JAVA_HOME=/usr/java/jdk1.8.0_31
why it doesn't use the value which used to load the node? I don't have such Java reference on the node.
BTW, it's Jenkins container, not VM

There can be a JAVA_HOME configured under Manage Jenkins -> Global Tool Configuration -> JDK. If you provide multiple, you need to specify the Java version that will be used by the build execution.
You can also use existing Java available on the system as well.
For example we have this in pipeline script to identify & print defined tools. tool name is the Name of the JDK defined in Global Tool Configuration:
def jdktool = tool name: 'JDK-1.8.0', type: 'hudson.model.JDK'
env.JAVA_HOME = "${jdktool}"

Related

How to run JMeter through CMD from jdk/bin directory?

I want to run JMeter test plans from a UNIX server where env variables for java is not set. Its a test server and I dont have access to set that. We have different JDK versions and all are sitting in directories. I need to run my JMeter TestPlans on this server. I went to JDK /bin folder and tired to execute the below command
$ {jmeter-path}/bin/jmeter -nt testplan.jmx -l testresult.jtl
but this says
./bin/java: not found
But if I do simple java -version it shows the version result.Is that something that JMeter needs specifically the java env variable set or it wont run ? I dont have permission to set and I want to run the testplan using the JDK/JRE from its directories. A help would be appreciated. Thanks in advance!
UPDATE:
I think I could work around this by editing the jmeter script file as suggested in the one of the comments. Since my requirement was running the JMeter from a specific server, I could achieve this by editing the JAVA_HOME variable value in the script.
JMeter looks for java executable in system PATH so you have 2 options:
Add bin folder of your JDK or JRE to PATH, something like:
PATH=$PATH:/location/of/your/jbk/bin && export PATH && {jmeter-path}/bin/jmeter -nt testplan.jmx -l testresult.jtl
Or if you have java in PATH just run ApacheJMeter.jar like:
java -jar {jmeter-path}/bin/ApacheJMeter.jar
You might also want to use jmeter.sh wrapper script instead of jmeter, it has some logic regarding java binary location
More information: Get Started With JMeter: Installation & Tests
The official JMeter Getting Started documentation says this:
To install a release build, simply unzip the zip/tar file into the directory where you want JMeter to be installed. Provided that you have a JRE/JDK correctly installed and the JAVA_HOME environment variable set, there is nothing more for you to do.
Based on the symptoms that you reported, I think that you have not set JAVA_HOME correctly. It should be set to an absolute path to your Java installation's top directory.

How to install Java in an Azure DevOps pipeline?

One step in my Azure DevOps pipeline requires Java to be installed on the agent.
I found the "Java Tool Installer" task here:
https://learn.microsoft.com/en-us/azure/devops/pipelines/tasks/tool/java-tool-installer?view=azure-devops
This looks, however, more like a SDK installer. I only need a Java runtime environment. I am looking for something like the Python installer task:
steps:
- task: UsePythonVersion#0
inputs:
versionSpec: '3.6'
Is there anything for Java getting close to this?
Is there anything for Java getting close to this?
Test with the Python installer task, this task is used to specify a specific python version via setting the environment.
To achieve a similar purpose with Java, you could set the Java_Home and Path variable during the runtime.
You could add a powershell task at the first step.
Here is an example:
- task: PowerShell#2
inputs:
targetType: 'inline'
script: |
echo "##vso[task.setvariable variable=JAVA_HOME]$(JAVA_HOME_11_X64)"
echo "##vso[task.setvariable variable=PATH]$(JAVA_HOME_11_X64)\bin;$(PATH)"
The $(JAVA_HOME_11_X64) variable is an environment variable.
You could check this variable with the script env | sort. Then the supported value will list in the output.
For example:
In this case, the JAVA_HOME variable will be set as the expected value.
Hope this helps.
Since Azure supports Docker, I would simply go for docker:
trigger:
- main
pr:
- main
- releases/*
pool:
vmImage: 'ubuntu-20.04'
container: adoptopenjdk:latest
steps:
- script: ./gradlew check

Change system Java

I have 3 java in my system 1.6, 1.7 and java 8.
I set my JAVA_HOME and path to 1.7, but when I run java -version using cmd administrator mode it return me 8.
Could anyone please tell me from where cmd pick java, and how i can change it to another version.
Updated: I already set java 7/bin in path variable
Start your cmd shell and type echo %PATH%.
OS would inspect listed directories and the first one that has java binary will be the one being used.
To change it - the PATH variable is set based on the settings in Control Panel -> System -> Advanced System Settings -> Environment Variables. You'd need to start a new cmd session to see updated changes.
When we run cmd as an administrator then it pick java.exe which is already available under C:/user/windows32 folder.
To resolve this issue, instead of appending my java at the end of the path, append in the starting of the path vaiable.
So here is the code used in cmd if run as administrator
set path=%JAVA_HOME%/bin;%path%;
java -version

Cassandra: Unable to find java executable

I am starting to learn cassandra and downloaded the file from the Apache Cassandra. When I navigated through the bin folder of the apache-cassandra-2.2.1/bin and run the command cassandra it gives me the error saying Unable to find java executable. Check JAVA_HOME and PATH environment variables.
But at the same path when I hit java I am able to see the java is accessible there. What should I do to get rid of this? I am using Windows OS.
Edit:
I rather used Datastax windows installer and now I see no error in running cqlsh.
I was also facing the same problem. Actually, somewhere in installation scripts it adds "bin/java" to "$JAVA_HOME". In my case, java path was "/usr/bin/java" so I had to configure $JAVA_HOME=/user.
export JAVA_HOME=/usr/
Set JAVA_HOME:
Right click My Computer and select Properties.
On the Advanced tab, select Environment Variables, and then edit JAVA_HOME to point to where the JDK software is located, for example, C:\Program Files\Java\jdk1.6.0_02.
FROM:
http://docs.oracle.com/cd/E19182-01/820-7851/inst_cli_jdk_javahome_t/index.html
login with root because Cassandra will start with the root
readlink -f $(which java)
vi ~/.bashrc
source ~/.bashrc
please note: java version should be same on cluster nodes
BR// nitin.k

Does jna.library.path use any environment variables?

On OS X 10.8.2, I'm using JNA and gstreamer-java (through the Eclipse IDE) to load gstreamer libraries. At first I installed gstreamer using the SDK provided by gstreamer.com. However, I uninstalled this and use Macports to install it.
The SDK's libs were installed to:
/System/Library/Frameworks/GStreamer.framework/Versions/0.10-x64/lib
But that directory no longer exists.
Where Macports installed the libs to:
/opt/local/lib
Now, say I want to set java to know of this location via some environment variable. Is this possible? It seems so, because running this line:
System.out.println( System.getProperty("jna.library.path"));
Shows /System/Library/Frameworks/GStreamer.framework/Versions/0.10-x64/lib. But I cannot for the life of me figure out where that got set. It's not set as a runtime VM argument. My $PATH and $DYLD_LIBRARY_PATH, $LD_LIBRARY_PATH do not have this directory set. They actually have the path I want, /opt/local/lib/ set which has no effect it seems. Running env shows no variables with the Framework path either.
So, jna.library.path. Is it set externally? How can I change it--without setting it at runtime or via java command-line arguments? Zero points for telling me to symlink.
EDIT:
Searching through gstreamer-java's files led me to gstreamer-java.spec, which has this line:
sed -i [...] -e "s,\(run.jvmargs=-Djna.library.path=\).*,\1%{_libdir}:$(pkg-config --variable=pluginsdir gstreamer-0.10),"
Running the contained command pkg-config --variable=pluginsdir gstreamer-0.10 gets me this:
/opt/local/lib/gstreamer-0.10
Which is the correct path for plugins. Further running pkg-config --print-variables gstreamer-0.10 gives me all these:
typelibdir
datarootdir
exec_prefix
pluginsdir
datadir
prefix
libdir
includedir
girdir
toolsdir
Which are all at or under the correct /opt/local/ directory.
Have you tried running outside of Eclipse?

Categories