JDK7 with lambda's downloadable

Tom Brus tombrus at gmail.com
Mon Sep 13 05:01:15 PDT 2010


Thank for the recipe Howard.

I turned the whole thing it into a shell script that pulls the latest mlvm
from the net, juggles everything around and generates a single example and
compiles and runs that. All is done in /tmp. Then I thought: "why not share
it, it might be handy for someone?". So here it is. (You need *wget*, *hg*and
*jdk1.6.0* installed, put the script anywhere and run it, only *
/tmp/jdk7lambda* will be created.)

-Tom

-----------------------------------------------------------

> #!/bin/sh
>
> #======================================
> versions=/System/Library/Frameworks/JavaVM.framework/Versions
> mlvm_dir=http://www.concord.org/~sbannasch/mlvm
> tmpdir=/tmp/jdk7lambda
> baseversion=1.6.0
> #======================================
>
> echo "=== prepare..."
> mkdir $tmpdir 2>/dev/null
> pushd $tmpdir >/dev/null
>
> echo "=== getting mlvm list..."
> rm -f index.html
> wget $mlvm_dir 2> wget.log
> if [ ! -f index.html ]; then echo could not load mlvm list; exit -99; fi
>
> rm -f wget.log
> mlvm_file=`cat index.html | sed -e 's/.*<a href="//;s/".*//' | fgrep
> 'mlvm-' | tail -1`
> mlvm_base=`echo $mlvm_file | sed -e 's/.tar.gz//'`
> mlvm_short=`echo $mlvm_base | sed -e 's/java-//;s/-internal-mlvm-/_/'`
> jdk=$tmpdir/$mlvm_short/Home
> if [ ! $mlvm_file ]; then echo no last mlvm found; exit -98 ;fi
>
> rm index.html
>
> if [ -f $mlvm_file ]; then
> echo "=== mlvm already downloaded..."
> else
> echo "=== getting new mlvm..."
> wget $mlvm_dir/$mlvm_file 2>/dev/null
> fi
>
> if [ ! -d $versions              ]; then echo no Versions dir; exit -97; fi
> if [ ! -d $versions/$baseversion ]; then echo no Versions/$baseversions
> dir; exit -96; fi
> if [ -d $mlvm_short ]; then
> echo "=== base already copied..."
> else
> echo "=== copying old $baseversion to $mlvm_short..."
> cp -R $versions/$baseversion $mlvm_short
> mv $mlvm_short/Home $mlvm_short/Home-orig
> rm -rf $mlvm_base
> tar -x -f $mlvm_file
> mv $mlvm_base $mlvm_short/Home
> fi
>
> if [ -d $tmpdir/lambda ]; then
> echo "=== lambda already exists..."
> else
> echo "=== pulling lambda..."
> mkdir $tmpdir/lambda
> pushd $tmpdir/lambda >/dev/null
> hg clone http://hg.openjdk.java.net/lambda/lambda/langtools >/dev/null
> cd langtools
> hg pull -u > /dev/null
> popd > /dev/null
> fi
>
> if [ -d $tmpdir/lambda/langtools/dist ]; then
> echo "=== lambda already build..."
> else
> echo "=== building lambda..."
> pushd $tmpdir/lambda/langtools/make >/dev/null
> ant -Dboot.java.home=$jdk -Dtarget.java.home=$jdk build-all-tools >
> /dev/null
> popd > /dev/null
> fi
>
> javac=$tmpdir/lambda/langtools/dist/bin/javac
> java=$jdk/bin/java
>
> echo "=== constructing example..."
> rm -rf examples
> mkdir -p examples/src/lam
> mkdir -p examples/classes
> cat > examples/src/lam/Main.java <<EOF
> package lam;
> class Main {
>     interface SAM { int foo(int i); }
>     static SAM sam = #(int i) { i * 2 };
>     public static void main(String[] args) {
> System.out.println("Hello "+sam.foo(21));
>     }
> }
> EOF
>
> echo "=== compiling example..."
> $javac -d examples/classes examples/src/lam/Main.java
>
> echo "=== running example..."
> $java -cp examples/classes lam.Main
>
> popd > /dev/null
> echo "=== done"
>
-----------------------------------------------------------

On Sat, Sep 11, 2010 at 03:06, Howard Lovatt <howard.lovatt at gmail.com>wrote:

> The following works for me on a Mac (you need Snow Leopard):
>
> Stage 1: Get a MLVM
> ================
> Download latest MLVM from http://www.concord.org/~sbannasch/mlvm/
> (currently java-1.7.0-internal-mlvm-2010_09_06.tar.gz)
> Go into /System/Library/Frameworks/JavaVmFramework/Version
> Duplicate the directory 1.6.0
> Rename to 1.7.0_2010_09_06 (or whatever the latests MLVM version date is)
> Go into 1.7.0_2010_09_06 and delete the directory Home
> Copy java-1.7.0-internal-mlvm-2010_09_06.tar.gz into 1.7.0_2010_09_06
> Expand java-1.7.0-internal-mlvm-2010_09_06.tar.gz and rename the
> expanded director to Home
>
> Stage 2: Get JDK 7 (you need mercurial, a.k.a. hg, from
> http://www.macports.org)
> ===========================================================
> Go to a directory where you want to install JDK7
> hg clone http://hg.openjdk.java.net/lambda/lambda/langtools
>
> Stage 3: Compile JDK 7 (this is the script I use - note the cd line is
> correct only for my directory structure)
>
> ==============================================================================
> #!/bin/sh
> # Pull latest JDK 7 build and compile all the tools (incl. javac)
>
> jdk=/System/Library/Frameworks/JavaVM.framework/Versions/1.7.0_2010_09_06/Home
> # Get latest
> cd ../../../../JDK7/langtools/
> hg pull -u
> # Build tools
> cd make
> ant -Dboot.java.home=$jdk -Dtarget.java.home=$jdk build-all-tools
>
> Stage 4: Compile and run your code (this is the script I use - note
> the cd lines etc. are correct for a Netbeans directory structure)
>
> =============================================================================================
> #!/bin/sh
> # Compile and run Lambda examples
>
> jdk=/System/Library/Frameworks/JavaVM.framework/Versions/1.7.0_2010_09_06/Home/bin
> javac=/Users/lov080/Dropbox/Personal/Java/JDK7/langtools/dist/lib/javac.jar
>
> guava=/Users/lov080/Dropbox/Personal/Java/GuavaLibrariesGoogleCollectionsAPI/guava-r05/guava-r05.jar
> package=lambdas
> # Compile (javac)
> cd ..
> rm ../build/classes/$package/*
> $jdk/java -Xbootclasspath/p:$javac -ea -jar $javac \
>  -g -deprecation -cp .:$guava -source 7 -Xlint:all
> -XDallowFunctionTypes -d ../build/classes \
>  $package/*.java
> # Run
> cd ../build/classes
> $jdk/java -cp .:$guava:$javac -ea -Xfuture \
>  -XX:+UnlockExperimentalVMOptions -XX:+EnableMethodHandles
> -XX:+EnableInvokeDynamic \
>  -XX:SuppressErrorAt=/constantPoolOop.cpp:283 \
>  $package.Main
>
>
>   -- Howard.
>


More information about the lambda-dev mailing list