Oracle JDK 8 on Heroku with a Gradle Build - java

Does anyone know where I can find a gradle-compatible buildback for Heroku that includes the Oracle Java JDK 1.8?
I'm deploying a reasonably complex spring application and I have a feeling the strange errors are caused by differences between OpenJDK and OracleJDK.
Alternatively, perhaps someone can guide me to forking an existing buildpack and creating my own.
EDIT: It wasn't a JDK issue after all

First of all, this is unlikely to solve your problem. That said...
You can customize the JDK by setting the JDK_URL_1_8 config var like so:
$ heroku config:set JDK_URL_1_8=http://...tar.gz
For Oracle JDK: you must strip the jdk1.8.0_51 dir from the tarball. You can do this by running:
$ tar -xvf jdk-8u51-linux-x64.gz
$ cd jdk1.8.0_51
$ tar -cv -f jdk-8u51-linux-x64.gz .
You should manually download the OracleJDK, edit as per above, and put it in a personal S3 bucket (or some other storage). Then use that URL for your config var.
Be aware that the Oracle JDK is much larger than the OpenJDK (by about 100mb). This will affect your slug size. (The size is mainly due to junk you don't need like GUI stuff and docs).

Related

kafka Manager CMAK does not support java 8 anymore

I am looking to install kafka Manager tool,
I already have installed:
Kafka version 3.1.0
openjdk version "1.8.0_322"
The Java_HOME is:
~ $ echo $JAVA_HOME
/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.322.b06-11.el8.x86_64/jre
When I see official Yahoo Kafka Manager , it require Java 11+
https://github.com/yahoo/CMAK
But I have Java 8
I found an old git repository supporting Java 8:
https://github.com/BonnierNews/kafka-manager
in the tuto, Again, if java is not in your path, or you need to run against a different version of java, using the following :
$ PATH=/usr/lib/jvm/zulu-11-amd64/bin:$PATH \
JAVA_HOME=/usr/lib/jvm/zulu-11-amd64 \
/path/to/sbt -java-home /usr/lib/jvm/zulu-11-amd64 clean dist
But is it that this cmd with change the java path and will affect the infrastructure installe ????
How is it possible to install kafka Manager ?
is it ok if I install both java version?
You should definitely update Java.
Having both on your system is fine, but Java 8 will soon be end of life, and will not get security patches, potentially leaving your system to be vulnerable to exploits.
I would not recommend running old forks of CMAK only to workaround your need to use an older Java version
this cmd with change the java path and will affect the infrastructure installe ????
No. Those variables are only used for that sbt dist command
Alternative solution would be to run CMAK in Docker

Two versions of Java (1.8.0_66 and 1.7.0_67) coexist on my Centos 6.4 , how to delete the old 1.7?

The old version that i had was java 1.7.0_67 . To run a program i was obliged to install a new version 1.8.0_66. I installed it from here http://tecadmin.net/install-java-8-on-centos-rhel-and-fedora/# but when i came to the last step which is the verification of the version of java i found 1.7.0_67.
It means that the system is still working with the old version.
I want to delete the old one and work with java 1.8.0_66 which is logically installed somewhere in the machine but not taken into consideration.
You should create a symlink to the new version of java executable and put it into /usr/bin. The way is which command works is to find the first available path of the file defined by the system environment variable. The one I suggested to use is very popular among UNIX/Linux systems. You could provide the exact path to the java intolation folder. cd /usr/bin; ln -s /path/to/javasdk/bin/java java. If you like to know how to create a symlink, this post would be helpful How to symlink a file in Linux?.

How to create compact profiles

I was googling to find a way to create a Compact profile in Java 1.8 .Is it possible to create a compact profile because Here is saying it is for embedded version only
Short answer
JEP 161 says that profiles must be in Java 8. They are. To create them, use make profiles
Slightly longer answerr
Your suspicion that profiles may exist on embedded platforms only and comment from #skiwi confused me a bit and I decided to check it myself.
Example with OpenJDK
To check profiles existence I took OpenJDK. I built it on my ubuntu x86 (I read this and this READMEs and process was simple). Instructions say finish with make all command. However, there were not compact profiles after that. Then I read Makefile help section and invoke make profiles. Success
$ hg clone http://hg.openjdk.java.net/jdk8/jdk8
$ cd jdk8
$ bash ./get_source.sh
$ bash ./configure
$ make all
$ make profiles
Then I found 'images' directory and went there
$ cd build/linux-x86-normal-server-release/images/
$ export PATH=j2re-compact1-image/bin/:$PATH
$ java -version
openjdk version "1.8.0-internal"
OpenJDK Runtime Environment (build 1.8.0-internal-fasdaq_2014_03_22_20_17-b00, profile compact1)
OpenJDK Server VM (build 25.0-b70, mixed mode)
As you can see from output:
It works
It's not embedded
It's compact1 profile
It's 1.8.0 version
About embedded and link you provided
There is a jrecreate tool that allows you to get jre with profile/vm/extensions you want (and do not include these you don't want).
so that applications that do not require the entire Platform can be deployed and run on small devices (c) jep161
There is no such tool in OpenJDK. Jrecreate is a part of embedded java as you can read from release notes.
It's hard question for me: what do you want to reach creating compact profile of non-embedded java. However, you're capable to do it :)

Installing Java Runtime with Saltstack

I'm using Salt to configure a bunch of Centos machines (rpm-based) and I need to install the Java runtime. I've seen some discussion of doing this with Ubuntu-based machines but I wonder if anybody has done it on Redhat-based distros. The problem is getting past the "accept license" dialog without user intervention.
You can actually pre-seed the answers to those interactive questions. Here's a thread from the salt-users mailing list showing how: https://groups.google.com/d/msg/salt-users/95Q707FFWYo/CdcJN7FPpRAJ
There is this nice saltstack-formula/sun-java-formula
Formula to set up and configure Java JREs and JDKs from a tarball archive sourced via URL.
It can be installed using formulas documentation. I did not test this on a centos installation, but it uses tarball installation so maybe it would work. If someone tests it on a rvm based system, please comment here! ;)
I successfuly installed this on a debian machine with the following pillar:
java_home: /usr/lib/java
java:
source_url: http://download.oracle.com/otn-pub/java/jdk/7u79-b15/jre-7u79-linux-x64.tar.gz
jce_url: http://download.oracle.com/otn-pub/java/jce/7/UnlimitedJCEPolicyJDK7.zip
version_name: jdk1.7.0_79
prefix: /usr/share/java
dl_opts: -b oraclelicense=accept-securebackup-cookie -L
It installed java-jdk successfully, but it failed to install jce. I created issue #20 for this just in case, but I don't actually need jce (at least, not now).

Multiple Java versions running concurrently under Windows

We have a couple of applications running on Java 5 and would like now to bring in an application based on Java 6. Can both java versions live together under Windows?
Is there any control panel to set the appropriate Java version for different applications, or any other way to set up, what version of Java will be used to run that particular application?
Of course you can use multiple versions of Java under Windows. And different applications can use different Java versions. How is your application started? Usually you will have a batch file where there is something like
java ...
This will search the Java executable using the PATH variable. So if Java 5 is first on the PATH, you will have problems running a Java 6 application. You should then modify the batch file to use a certain Java version e.g. by defining a environment variable JAVA6HOME with the value C:\java\java6 (if Java 6 is installed in this directory) and change the batch file calling
%JAVA6HOME%\bin\java ...
I was appalled at the clumsiness of the CLASSPATH, JAVA_HOME, and PATH ideas, in Windows, to keep track of Java files. I got here, because of multiple JREs, and how to content with it. Without regurgitating information, from a guy much more clever than me, I would rather point to to his article on this issue, which for me, resolves it perfectly.
Article by: Ted Neward: Multiple Java Homes: Giving Java Apps Their Own JRE
With the exponential growth of Java as a server-side development language has come an equivablent
exponential growth in Java development tools, environments, frameworks, and extensions.
Unfortunately, not all of these tools play nicely together under the same Java VM installation. Some
require a Servlet 2.1-compliant environment, some require 2.2. Some only run under JDK 1.2 or above,
some under JDK 1.1 (and no higher). Some require the "com.sun.swing" packages from pre-Swing 1.0
days, others require the "javax.swing" package names.
Worse yet, this problem can be found even within the corporate enterprise, as systems developed using
Java from just six months ago may suddenly "not work" due to the installation of some Java Extension
required by a new (seemingly unrelated) application release. This can complicate deployment of Java
applications across the corporation, and lead customers to wonder precisely why, five years after the
start of the infamous "Installing-this-app-breaks-my-system" woes began with Microsoft's DLL schemes,
we still haven't progressed much beyond that. (In fact, the new .NET initiative actually seeks to solve the
infamous "DLL-Hell" problem just described.)
This paper describes how to configure a Java installation such that a given application receives its own,
private, JRE, allowing multiple Java environments to coexist without driving customers (or system
administrators) insane...
It is absolutely possible to install side-by-side several JRE/JDK versions. Moreover, you don't have to do anything special for that to happen, as Sun is creating a different folder for each (under Program Files).
There is no control panel to check which JRE works for each application. Basically, the JRE that will work would be the first in your PATH environment variable. You can change that, or the JAVA_HOME variable, or create specific cmd/bat files to launch the applications you desire, each with a different JRE in path.
We can install multiple versions of Java Development kits on the same machine using SDKMan.
Some points about SDKMan are as following:
SDKMan is free to use and it is developed by the open source community.
SDKMan is written in bash and it only requires curl and zip/unzip programs to be present on your system.
SDKMan can install around 29 Software Development Kits for the JVM such as Java, Groovy, Scala, Kotlin and Ceylon. Ant, Gradle, Grails, Maven, SBT, Spark, Spring Boot, Vert.x.
We do not need to worry about setting the _HOME and PATH environment variables because SDKMan handles it automatically.
SDKMan can run on any UNIX based platforms such as Mac OSX, Linux, Cygwin, Solaris and FreeBSD and we can install it using following commands:
$ curl -s "https://get.sdkman.io" | bash
$ source "$HOME/.sdkman/bin/sdkman-init.sh"
Because SDKMan is written in bash and only requires curl and zip/unzip to be present on your system. You can install SDKMan on windows as well either by first installing Cygwin or Git Bash for Windows environment and then running above commands.
Command sdk list java will give us a list of java versions which we can install using SDKMan.
Installing Java 8
$ sdk install java 8.0.201-oracle
Installing Java 9
$ sdk install java 9.0.4-open
Installing Java 11
$ sdk install java 11.0.2-open
Uninstalling a Java version
In case you want to uninstall any JDK version e.g., 11.0.2-open you can do that as follows:
$ sdk uninstall java 11.0.2-open
Switching current Java version
If you want to activate one version of JDK for all terminals and applications, you can use the command
sdk default java <your-java_version>
Above commands will also update the PATH and JAVA_HOME variables automatically. You can read more on my article How to Install Multiple Versions of Java on the Same Machine.
It should be possible changing setting the JAVA_HOME environment variable differently for specific applications.
When starting from the command line or from a batch script you can use set JAVA_HOME=C:\...\j2dskXXX to change the JAVA_HOME environment.
It is possible that you also need to change the PATH environment variable to use the correct java binary. To do this you can use set PATH=%JAVA_HOME%\bin;%PATH%.
I use a simple script when starting JMeter with my own java version
setlocal
set JAVA_HOME="c:\java8"
set PATH=%JAVA_HOME%\bin;%PATH%;
java -version
To have a java "portable"
you can use this method here:
https://www.whitebyte.info/programming/java/how-to-install-a-portable-jdk-in-windows-without-admin-rights
Or use links. While it is rather unpleasant to update the PATH in a running environment, it's easy to recreate a link to a new version of JRE/JDK. So:
install different versions of JDK you want to use
create a link to that folder either by junction or by built-in mklink command
set the PATH to the link
If other version of java is to be used, delete the link, create a new one, PATH/JAVA_HOME/hardcoded scripts remain untouched
Invoking Java with "java -version:1.5", etc. should run with the correct version of Java. (Obviously replace 1.5 with the version you want.)
If Java is properly installed on Windows there are paths to the vm for each version stored in the registry which it uses so you don't need to mess about with environment versions on Windows.
If you use Java Web Start (you can start applications from any URL, even the local file system) it will take care of finding the right version for your application.
Using Java Web Start, you can install multiple JRE, then call what you need.
On win, you can make a .bat file:
1- online version:
<your_JRE_version\bin\javaws.exe> -localfile -J-Djnlp.application.href=<the url of .jnlp file.jnlp> -localfile -J "<path_temp_jnlp_file_.jnlp>"
2- launch from cache:
<your_JRE_version\bin\javaws.exe> -localfile -J "<path_of_your_local_jnlp_file.jnlp>"

Categories

Resources