Java And The JVM
The following JDKs are installed:
Oracle JDK 7
Oracle JDK 8
Oracle JDK 9
We provide the function
jdk_switcher, available as a setup command, to choose the JDK for your builds. This function can take one of two commands,
usewill select the given JDK by changing the java executables, and setting JAVA_HOME and JRE_HOME.
homewill print out the value of JAVA_HOME for a given JDK (but make no modifications).
The valid values for
home are openjdk8, openjdk11, oraclejdk7, oraclejdk8 and oraclejdk9. By default, OpenJDK 8 is selected. The following is the resulting Java version, JAVA_HOME, and JRE_HOME for each JDK:
jdk_switcher home openjdk8 # /usr/lib/jvm/java-8-openjdk-amd64 jdk_switcher use openjdk8 echo $JAVA_HOME # /usr/lib/jvm/java-8-openjdk-amd64 echo $JRE_HOME # /usr/lib/jvm/java-8-openjdk-amd64/jre java -version # openjdk version "1.8.0_191" # OpenJDK Runtime Environment (build 1.8.0_191-8u191-b12-2ubuntu0.18.04.1-b12) # OpenJDK 64-Bit Server VM (build 25.191-b12, mixed mode)
jdk_switcher home openjdk11 # /usr/lib/jvm/java-11-openjdk-amd64 jdk_switcher use openjdk11 echo $JAVA_HOME # /usr/lib/jvm/java-11-openjdk-amd64 echo $JRE_HOME # /usr/lib/jvm/java-11-openjdk-amd64/jre java -version #openjdk version "11.0.2" 2019-01-15 #OpenJDK Runtime Environment (build 11.0.2+9-Ubuntu-3ubuntu118.04.3) #OpenJDK 64-Bit Server VM (build 11.0.2+9-Ubuntu-3ubuntu118.04.3, mixed mode, sharing)
jdk_switcher home oraclejdk7 # /usr/lib/jvm/java-7-oracle jdk_switcher use oraclejdk7 echo $JAVA_HOME # /usr/lib/jvm/java-7-oracle echo $JRE_HOME # /usr/lib/jvm/java-7-oracle/jre java -version # java version "1.7.0_80" # Java(TM) SE Runtime Environment (build 1.7.0_80-b15) # Java HotSpot(TM) 64-Bit Server VM (build 24.80-b11, mixed mode)
jdk_switcher home oraclejdk8 # /usr/lib/jvm/java-8-oracle jdk_switcher use oraclejdk8 echo $JAVA_HOME # /usr/lib/jvm/java-8-oracle echo $JRE_HOME # /usr/lib/jvm/java-8-oracle/jre java -version # java version "1.8.0_201" # Java(TM) SE Runtime Environment (build 1.8.0_201-b09) # Java HotSpot(TM) 64-Bit Server VM (build 25.201-b09, mixed mode)
jdk_switcher home oraclejdk9 # /usr/lib/jvm/java-9-oracle jdk_switcher use oraclejdk9 echo $JAVA_HOME # /usr/lib/jvm/java-9-oracle echo $JRE_HOME # /usr/lib/jvm/java-9-oracle/jre java -version # java version "9.0.4" # Java(TM) SE Runtime Environment (build 9.0.4+11) # Java HotSpot(TM) 64-Bit Server VM (build 9.0.4+11, mixed mode)
If you need to install a different JDK version, consider using SDKMAN to install it. For example if you want to install OpenJDK 11, you can add the following to your Setup Commands:
source /dev/stdin <<< "$(curl -sSL https://raw.githubusercontent.com/codeship/scripts/master/packages/sdkman.sh)" sdk install java 11.0.2-open export PATH=$HOME/.sdkman/candidates/java/current/bin:$PATH export JAVA_HOME=$HOME/.sdkman/candidates/java/current # Add if you want to confirm the installed version java -version
Note the available JDK versions in SDKMAN change as new JDK versions come out so the specific version you are installing may need to be updated occasionally. You can check the available versions by running
sdk list java.
The following tools are preinstalled in our virtual machine. You can add them to your setup or test commands to start your build:
CodeShip automatically caches the
$HOME/.m2/repository directories between builds to optimize build performance. You can read this article to learn more about the dependency cache and how to clear it.
All build tools and test frameworks, such as JUnit, will work.
If you are running parallel test pipelines, you will want separate your tests into groups and call a group specifically in each pipeline. For instance:
mvn test -Dtest=class_1
mvn test -Dtest=class_2
In addition to parallelizing your tests explicitly via parallel pipelines, some customers have found using the parallel features in JUnit and other testing frameworks to be a good way to speed up your tests.
Note that aggressive parallelization can cause resource and build failure issues, as well.
Due to Java version issues, you may find it helpful to test your commands with different versions via an SSH debug session if tests are running differently on CodeShip compared to your local machine.
The Java Cryptography Extension (JCE) ships from Oracle by default on Java 8 and Java 9. You can also check if JCE is in limited or unlimited mode by checking the allowed key length. Limited mode will return
128 and unlimited mode will return
jdk_switcher use oraclejdk9 jrunscript -e 'print (javax.crypto.Cipher.getMaxAllowedKeyLength("AES"));'