Skip to content

Commit f795a12

Browse files
committed
Bundle in maven 3.3.9 🎉
1 parent a674169 commit f795a12

File tree

6 files changed

+78
-49
lines changed

6 files changed

+78
-49
lines changed

tmc-langs-java/pom.xml

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -117,6 +117,12 @@
117117
<artifactId>ant</artifactId>
118118
<version>1.9.6</version>
119119
</dependency>
120+
<dependency>
121+
122+
<groupId>org.rauschig</groupId>
123+
<artifactId>jarchivelib</artifactId>
124+
<version>0.7.1</version>
125+
</dependency>
120126

121127
<dependency>
122128
<groupId>org.apache.maven</groupId>
Lines changed: 2 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,7 @@
11
package fi.helsinki.cs.tmc.langs.java.maven;
22

3-
import fi.helsinki.cs.tmc.langs.java.exception.MavenExecutorException;
43
import fi.helsinki.cs.tmc.langs.java.maven.MavenTaskRunner.MavenExecutionResult;
54

6-
import com.google.common.base.Strings;
7-
85
import org.slf4j.Logger;
96
import org.slf4j.LoggerFactory;
107

@@ -15,17 +12,7 @@ public class MavenExecutors {
1512
private static final Logger log = LoggerFactory.getLogger(MavenExecutors.class);
1613

1714
public static final MavenExecutionResult tryAndExec(Path directory, String[] mavenArgs) {
18-
if (!Strings.isNullOrEmpty(System.getenv("M3_HOME"))
19-
|| !Strings.isNullOrEmpty(System.getenv("M2_HOME"))) {
20-
log.info("Selected MavenInvokator");
21-
try {
22-
return new MavenInvokatorMavenTaskRunner().exec(directory, mavenArgs);
23-
} catch (MavenExecutorException e) {
24-
log.info("trying with MvnCli, MavenInvokatorMavenTaskRunner failed with {}", e);
25-
return new MvnCliMavenRunner().exec(directory, mavenArgs);
26-
}
27-
}
28-
log.info("Selected MvnCli");
29-
return new MvnCliMavenRunner().exec(directory, mavenArgs);
15+
log.info("Defaultin to MavenInvocator");
16+
return new MavenInvokatorMavenTaskRunner().exec(directory, mavenArgs);
3017
}
3118
}

tmc-langs-java/src/main/java/fi/helsinki/cs/tmc/langs/java/maven/MavenInvokatorMavenTaskRunner.java

Lines changed: 67 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
import fi.helsinki.cs.tmc.langs.java.exception.MavenExecutorException;
44

5+
import com.google.common.base.Preconditions;
56
import org.apache.maven.shared.invoker.DefaultInvocationRequest;
67
import org.apache.maven.shared.invoker.DefaultInvoker;
78
import org.apache.maven.shared.invoker.InvocationOutputHandler;
@@ -11,13 +12,21 @@
1112

1213
import org.codehaus.plexus.util.cli.CommandLineException;
1314

15+
import org.rauschig.jarchivelib.ArchiveFormat;
16+
import org.rauschig.jarchivelib.Archiver;
17+
import org.rauschig.jarchivelib.ArchiverFactory;
1418
import org.slf4j.Logger;
1519
import org.slf4j.LoggerFactory;
1620

1721
import java.io.ByteArrayOutputStream;
1822
import java.io.File;
23+
import java.io.IOException;
24+
import java.io.InputStream;
1925
import java.io.PrintStream;
26+
import java.nio.file.Files;
2027
import java.nio.file.Path;
28+
import java.nio.file.Paths;
29+
import java.nio.file.StandardCopyOption;
2130
import java.util.Arrays;
2231

2332
public class MavenInvokatorMavenTaskRunner implements MavenTaskRunner {
@@ -41,6 +50,15 @@ public MavenExecutionResult exec(Path projectPath, String[] mavenArgs) {
4150
if (mavenHome == null) {
4251
mavenHome = System.getenv("MAVEN_HOME");
4352
}
53+
if (mavenHome == null) {
54+
mavenHome = System.getProperty("maven.home");
55+
}
56+
if (mavenHome == null) {
57+
mavenHome = useBundledMaven().toString();
58+
}
59+
60+
log.info("Using maven at: {}", mavenHome);
61+
4462
invoker.setMavenHome(new File(mavenHome));
4563

4664
final ByteArrayOutputStream outBuf = new ByteArrayOutputStream();
@@ -75,4 +93,53 @@ public void consumeLine(String line) {
7593
throw new MavenExecutorException(e);
7694
}
7795
}
96+
97+
private Path useBundledMaven() {
98+
Path mavenHome = getConfigDirectory();
99+
if (Files.exists(mavenHome)) {
100+
log.info("Maven already extracted");
101+
102+
// Add the name of the extracted folder to the path
103+
return mavenHome.resolve("apache-maven-3.3.9");
104+
}
105+
log.info("Maven bundle not previously extracted, extracting...");
106+
try {
107+
108+
InputStream data = getClass().getResourceAsStream("apache-maven-3.3.9.zip");
109+
Preconditions.checkNotNull(data, "Couldn't load bundled maven from tmc-langs-java.jar.");
110+
Path tmpFile = File.createTempFile("tmc-maven", "zip").toPath();
111+
Files.copy(data, tmpFile, StandardCopyOption.REPLACE_EXISTING);
112+
Archiver archiver = ArchiverFactory.createArchiver(ArchiveFormat.ZIP);
113+
archiver.extract(tmpFile.toFile(), mavenHome.toFile());
114+
115+
// Add the name of the extracted folder to the path
116+
return mavenHome.resolve("apache-maven-3.3.9");
117+
} catch (IOException e) {
118+
throw new RuntimeException(e);
119+
}
120+
}
121+
122+
static Path getConfigDirectory() {
123+
Path configPath;
124+
125+
if (System.getProperty("os.name").toLowerCase().contains("windows")) {
126+
String appdata = System.getenv("APPDATA");
127+
if (appdata == null) {
128+
configPath = Paths.get(System.getProperty("user.home"));
129+
} else {
130+
configPath = Paths.get(appdata);
131+
}
132+
} else {
133+
//Assume we're using Unix (Linux, Mac OS X or *BSD)
134+
String configEnv = System.getenv("XDG_CONFIG_HOME");
135+
136+
if (configEnv != null && configEnv.length() > 0) {
137+
configPath = Paths.get(configEnv);
138+
} else {
139+
configPath = Paths.get(System.getProperty("user.home")).resolve(".config");
140+
}
141+
}
142+
return configPath.resolve("tmc");
143+
}
144+
78145
}

tmc-langs-java/src/main/java/fi/helsinki/cs/tmc/langs/java/maven/MavenTaskRunner.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,14 @@
11
package fi.helsinki.cs.tmc.langs.java.maven;
22

3+
import org.apache.maven.cli.MavenCli;
4+
35
import java.nio.file.Path;
46

57
public interface MavenTaskRunner {
68

79
MavenExecutionResult exec(Path directory, String[] mavenArgs);
810

9-
public final class MavenExecutionResult {
11+
final class MavenExecutionResult {
1012

1113
private int exitCode;
1214

tmc-langs-java/src/main/java/fi/helsinki/cs/tmc/langs/java/maven/MvnCliMavenRunner.java

Lines changed: 0 additions & 33 deletions
This file was deleted.

0 commit comments

Comments
 (0)