From c6091024864e0fc9069683534370306838eb371a Mon Sep 17 00:00:00 2001 From: Sven Gothel Date: Tue, 29 Nov 2011 05:23:41 +0100 Subject: JarUtil (Fix Bug 522): Handle case where given URL doesn't contain any '/' (eg. Eclipse 'rsrc:' case) - Use ':' as 'path' delimiter in case no path via '/' is given. +++ Manual tested w/ Eclipse: Preparations: =============== 1) Set up a vanilla eclipse (3.7.0) workspace 2) Add the JOGL User Library: - Window.Preference - Java.Build_Path.User_Libraries: + JOGL + gluegen-rt.jar + jogl.all.jar + gluegen-rt-natives-linux-amd64.jar + jogl-all-natives-linux-amd64.jar You may add all other native JARs here. Note that these are not required in the CLASSPATH by JOGL, however, they are required by Eclipse to export your project as a Runnable JAR File. 3) New test project - Right-click your project in the Package Explorer and click "Properties". - Select "Java Build Path" and click the "Libraries" tab. + JOGL - Add some simple code .. - Run as Java Application .. Test-1: ========= Export - Right-click your project in the Package Explorer and click "Export" - Select Java.Runnable_JAR_file + Launch configuration + some destination path + Library handling: Copy required libraries into a sub-folder next to the generated JAR Result: Works! ./lala01.jar ./lala01_lib/jogl.all.jar ./lala01_lib/jogl-all-natives-linux-amd64.jar ./lala01_lib/... etc .. Test-2: ========= Export - Right-click your project in the Package Explorer and click "Export" - Select Java.Runnable_JAR_file + Launch configuration + some destination path + Library handling: Package required libraries into generated JAR Result: Works! ./lala02.jar: Manifest-Version: 1.0 Rsrc-Class-Path: ./ gluegen-rt-natives-linux-amd64.jar gluegen-rt.jar jogl-all-natives-linux-amd64.jar jogl.all.jar Class-Path: . Rsrc-Main-Class: Test01 Main-Class: org.eclipse.jdt.internal.jarinjarloader.JarRsrcLoader --- src/java/com/jogamp/common/util/JarUtil.java | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-) (limited to 'src/java/com') diff --git a/src/java/com/jogamp/common/util/JarUtil.java b/src/java/com/jogamp/common/util/JarUtil.java index 517ac1a..4beda94 100644 --- a/src/java/com/jogamp/common/util/JarUtil.java +++ b/src/java/com/jogamp/common/util/JarUtil.java @@ -208,13 +208,19 @@ public class JarUtil { System.out.println("getURLDirname "+aURL+", extForm: "+urlS); } // from - // file:/some/path/gluegen-rt.jar + // file:/some/path/gluegen-rt.jar _or_ rsrc:gluegen-rt.jar // to - // file:/some/path/ + // file:/some/path/ _or_ rsrc: int idx = urlS.lastIndexOf('/'); - if (0 <= idx) { - urlS = urlS.substring(0, idx+1); // exclude jar name, include terminal '/' - } + if(0 > idx) { + // no abs-path, check for protocol terminator ':' + idx = urlS.lastIndexOf(':'); + if(0 > idx) { + throw new IllegalArgumentException("URL does not contain protocol terminator ':', in <"+aURL.toExternalForm()+">, got <"+urlS+">"); + } + } + urlS = urlS.substring(0, idx+1); // exclude jar name, include terminal '/' or ':' + if(DEBUG) { System.out.println("getJarURLDirname res: "+urlS); } -- cgit v1.2.3