Skip to content

Commit 7bbd6d0

Browse files
committed
feat(maven): detect current javac
1 parent 8c245ba commit 7bbd6d0

1 file changed

Lines changed: 35 additions & 12 deletions

File tree

  • rockcraft-maven/src/main/java/com/canonical/rockcraft/maven

rockcraft-maven/src/main/java/com/canonical/rockcraft/maven/Toolchain.java

Lines changed: 35 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,39 @@ public final class Toolchain {
2121
private Toolchain() {
2222
}
2323

24+
private static String getToolchainJavacPath(ToolchainManager toolchainManager) {
25+
if (toolchainManager == null) {
26+
return null;
27+
}
28+
org.apache.maven.toolchain.Toolchain jdkToolchain = toolchainManager.getToolchainFromBuildContext("jdk", session);
29+
if (jdkToolchain == null) {
30+
return null;
31+
}
32+
return jdkToolchain.findTool("javac");
33+
}
34+
35+
private static String getJavacPath(ToolchainManager toolchainManager) {
36+
String where = getToolchainJavacPath(toolchainManager);
37+
if (where != null) {
38+
return where;
39+
}
40+
String javaHome = System.getProperty("java.home");
41+
if (javaHome == null || javaHome.isEmpty()) {
42+
log.warn("java-rockcraft-plugin: please configure Maven toolchain or provide a valid Java Home.");
43+
return null;
44+
}
45+
Path java9Path = Paths.get(javaHome, "bin", "javac");
46+
Path java8Path = Paths.get(Paths.get(javaHome).getParent(), "bin", "javac");
47+
48+
if (Files.isExecutable(java9Path)) {
49+
return java9Path;
50+
} else if (Files.isExecutable(java8Path)) {
51+
return java8Path;
52+
}
53+
log.warn("java-rockcraft-plugin: please configure Maven toolchain or provide a valid Java Home: "+ javaHome);
54+
return null;
55+
}
56+
2457
/**
2558
* Gets the toolchain settings for the project
2659
*
@@ -31,21 +64,11 @@ private Toolchain() {
3164
*/
3265
public static String getToolchainPackage(MavenSession session, ToolchainManager toolchainManager, Log log) {
3366
try {
34-
if (toolchainManager == null) {
35-
log.warn("java-rockcraft-plugin: Maven Toolchain manager is not present.");
36-
return ToolchainHelper.DEFAULT_JDK;
37-
}
38-
System.err.println("---- has toolchain manager --- ");
39-
org.apache.maven.toolchain.Toolchain jdkToolchain = toolchainManager.getToolchainFromBuildContext("jdk", session);
40-
if (jdkToolchain == null) {
41-
log.warn("java-rockcraft-plugin: Maven Toolchain is not configured. Please configure toolchain or use buildPackage configuration");
42-
return ToolchainHelper.DEFAULT_JDK;
43-
}
44-
String tool = jdkToolchain.findTool("javac");
67+
String tool = getJavacPath(toolchainManager);
4568
if (tool == null) {
46-
log.warn("java-rockcraft-plugin: Maven Toolchain - javac tool is not found.");
4769
return ToolchainHelper.DEFAULT_JDK;
4870
}
71+
4972
ToolchainHelper.ToolchainPackage p = ToolchainHelper.getBuildPackage(tool);
5073
switch (p.getReason()) {
5174
case JAVAC_ERROR:

0 commit comments

Comments
 (0)