diff --git a/src/main/java/com/jayway/maven/plugins/android/AndroidSdk.java b/src/main/java/com/jayway/maven/plugins/android/AndroidSdk.java index b8ffa37f9..6f450759b 100644 --- a/src/main/java/com/jayway/maven/plugins/android/AndroidSdk.java +++ b/src/main/java/com/jayway/maven/plugins/android/AndroidSdk.java @@ -134,7 +134,7 @@ private void assertPathIsDirectory(final File path) { /** * Returns the complete path for a tool, based on this SDK. * - * @param tool which tool, for example adb. + * @param tool which tool, for example adb or dx.jar. * @return the complete path as a String, including the tool's filename. */ public String getPathForTool(String tool) { @@ -143,12 +143,15 @@ public String getPathForTool(String tool) { sdkPath + "/" + PLATFORM_TOOLS_FOLDER_NAME + "/" + tool, sdkPath + "/" + PLATFORM_TOOLS_FOLDER_NAME + "/" + tool + ".exe", sdkPath + "/" + PLATFORM_TOOLS_FOLDER_NAME + "/" + tool + ".bat", + sdkPath + "/" + PLATFORM_TOOLS_FOLDER_NAME + "/lib/" + tool, getPlatform() + "/tools/" + tool, getPlatform() + "/tools/" + tool + ".exe", getPlatform() + "/tools/" + tool + ".bat", + getPlatform() + "/tools/lib/" + tool, sdkPath + "/tools/" + tool, sdkPath + "/tools/" + tool + ".exe", - sdkPath + "/tools/" + tool + ".bat" + sdkPath + "/tools/" + tool + ".bat", + sdkPath + "/tools/lib/" + tool }; for (String possiblePath : possiblePaths) { diff --git a/src/main/java/com/jayway/maven/plugins/android/phase08preparepackage/DexMojo.java b/src/main/java/com/jayway/maven/plugins/android/phase08preparepackage/DexMojo.java index d01b409be..309630b81 100644 --- a/src/main/java/com/jayway/maven/plugins/android/phase08preparepackage/DexMojo.java +++ b/src/main/java/com/jayway/maven/plugins/android/phase08preparepackage/DexMojo.java @@ -85,6 +85,8 @@ private void runDex(CommandExecutor executor, File outputFile, File inputFile) throws MojoExecutionException { File classesOutputDirectory = new File(project.getBuild().getDirectory(), "android-classes"); List commands = new ArrayList(); + commands.add("-jar"); + commands.add(getAndroidSdk().getPathForTool("dx.jar")); if (jvmArguments != null) { for (String jvmArgument : jvmArguments) { if (jvmArgument != null) { @@ -101,14 +103,26 @@ private void runDex(CommandExecutor executor, File outputFile, if (coreLibrary) { commands.add("--core-library"); } - getLog().info(getAndroidSdk().getPathForTool("dx") + " " + commands.toString()); + final String javaExecutable = getJavaExecutable().getAbsolutePath(); + getLog().info(javaExecutable + " " + commands.toString()); try { - executor.executeCommand(getAndroidSdk().getPathForTool("dx"), commands, project.getBasedir(), false); + executor.executeCommand(javaExecutable, commands, project.getBasedir(), false); } catch (ExecutionException e) { throw new MojoExecutionException("", e); } } + /** + * Figure out the full path to the current java executable. + * + * @return the full path to the current java executable. + */ + private static File getJavaExecutable() { + final String javaHome = System.getProperty("java.home"); + final String slash = File.separator; + return new File(javaHome + slash + "bin" + slash + "java"); + } + protected File createApkSourcesFile() throws MojoExecutionException { final File apksources = new File(project.getBuild().getDirectory(), project.getBuild().getFinalName() + ".apksources"); FileUtils.deleteQuietly(apksources);