Automating Eclipse launch

I’ve recently taken up the Eclipse team at Google (we integrate Google’s internal build tools and distributed development environment with the Eclipse Platform) and we are constantly faced with the challenge of maintaining several distributions in a multi-user environment.


I thought I’d use some of the goodness we’ve come up with in my home environment too, so have put together a much-scaled-down version of our launch script, for my personal use – and thought I’d share this more broadly, as I’m sure other folks will find this useful too.


I generally have multiple installation and user configuration profiles, and even from the desktop launcher, I much prefer to use launch scripts than just pointing the shortcut to the binary executable.


Here is my generic configuration script:

#!/bin/bash

#
# Runs the stable version of Eclipse.
# By default, it will launch Indigo, installed in /opt/eclipse; different
# versions can be launched by invoking this script and setting the
# ECLIPSE_INSTALL and CONFIG variables to point to the correct places.
#
# The default configuration directory is set to '/home/$USER/.eclipse/eclipse37'
# but this can be changed exporting a different value for CONFIG.
# See /home/marco/bin/eclipse-helios for an example of how to do this.

##############################
# Globals (default value):
#
# LD_LIBRARY_PATH (/usr/local/lib:/usr/lib)
# library search path for C++ dynamic libraries
#
# ECLIPSE_INSTALL ()
# installation directory
#
# CONFIG ()
# user's configuration directory
#
# MEM_ALLOC_POOL, PERM_SIZE (2,048MB, 256MB)
# Memory allocation and PermGen size
#
# JVM (/usr/local/java/bin/java)
# Java VM executable (java)
#
# By setting any of the variables above after source`ing this script
# and before invoking launch_eclipse() the default value(s) can be changed
##############################
declare ECLIPSE_INSTALL
declare CONFIG
declare MEM_ALLOC_POOL
declare PERM_SIZE
declare JVM="/usr/local/java/bin/java"

##############################
# Concatenates input paramters to LD_LIBRARY_PATH, if not already present
##############################
munge_library_path() {
for dir in $@; do
if [ -n "${dir}" ]; then
local is_present=`echo $LD_LIBRARY_PATH | grep ${dir} | wc -l`
if [ ${is_present} -eq 0 ]; then
export LD_LIBRARY_PATH=${dir}:$LD_LIBRARY_PATH
fi
fi
done
}

##############################
# Sets up global variables with default values if not already set
##############################
check_dirs() {
# Installation directory
if [ -z "${ECLIPSE_INSTALL}" ]; then
echo "You must set ECLIPSE_INSTALL to the Eclipse installation directory"
exit -1
fi
if [ ! -d ${ECLIPSE_INSTALL} ]; then
echo "Cannot find Eclipse installation directory (${ECLIPSE_INSTALL})"
exit -1
fi

# Configuration directory, user-specific
if [ ! -d "${CONFIG}" ]; then
mkdir -p ${CONFIG}
fi
}


##############################
# The location of the JVM, currently the default (OpenJDK 6)
##############################
locate_jvm() {
if [ ! -e "${JVM}" ]; then
echo "Could not locate a valid JVM at ${JVM}"
echo "Trying to locate a valid java installation"
JVM=`which java`
if [ -z "${JVM}" ]; then
echo "Could not find a valid JRE, giving up"
return -1
fi
echo "Found a JRE at ${JVM}"
fi
}

##############################
# Runs a few checks, sets up the LD library path and then launches Eclipse
#
# Param:
# clean will set the '-clean' Eclipse option that will clear the plugins cache
##############################
launch_eclipse() {
check_dirs
locate_jvm
munge_library_path /usr/local/lib /usr/lib

if [ "$1" == "clean" ]; then
CLEAN="-clean"
fi

$ECLIPSE_INSTALL/eclipse $CLEAN -vm $JVM -configuration $CONFIG \
-bundlepool $CONFIG/plugins \
-vmargs -Xmx${MEM_ALLOC_POOL:-"2048M"} -XX:MaxPermSize=${PERM_SIZE:-"256M"}
}

This is used in the actual shell script (called, unimaginatively, eclipse):

#!/bin/bash

#
# Runs the stable version of Eclipse.
# By default, it will launch Indigo, installed in /opt/eclipse; different
# versions can be launched by invoking this script and setting the
# ECLIPSE_INSTALL and CONFIG variables to point to the correct places.
#
# See eclipse_config.sh for more details

source /home/marco/bin/eclipse_config.sh

ECLIPSE_INSTALL="/opt/eclipse"
CONFIG="/home/${USER}/.eclipse/eclipse37"

launch_eclipse



What is left is to just point a desktop (or menu) launcher to this script and replace the generic icon with the one in the eclipse/ folder (icon.xpm)



CREDITS — I would very much like to gratefully acknowledge Machtelt Garrels and his much-consulted “Bash Guide for Beginners;” I never seem able to remember the bash conditional operators!

Advertisements

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s