Skip to content

Commit f8e17d4

Browse files
authored
Add support to read classpath from the CLASSPATH environment variable (#256)
* Support to use CLASSPATH environment variable * Add tests
1 parent 1b1306b commit f8e17d4

3 files changed

Lines changed: 26 additions & 0 deletions

File tree

pom.xml

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -160,6 +160,10 @@
160160
--add-exports jdk.compiler/com.sun.tools.javac.util=ALL-UNNAMED
161161
--add-opens jdk.compiler/com.sun.tools.javac.api=ALL-UNNAMED
162162
</argLine>
163+
<environmentVariables>
164+
<!-- used by InferConfigTest.java -->
165+
<CLASSPATH>src/test/examples/home-dir/.m2/repository/com/external/external-library/1.1/external-library-1.1.jar</CLASSPATH>
166+
</environmentVariables>
163167
</configuration>
164168
</plugin>
165169
<!-- Copy dependencies to dist -->

src/main/java/org/javacs/InferConfig.java

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
import java.nio.file.Path;
1111
import java.nio.file.Paths;
1212
import java.util.*;
13+
import java.util.stream.*;
1314
import java.util.logging.Logger;
1415
import java.util.regex.Pattern;
1516
import java.util.stream.Stream;
@@ -78,6 +79,14 @@ Set<Path> classPath() {
7879
return bazelClasspath(bazelWorkspaceRoot);
7980
}
8081

82+
var classpathEnvVar = System.getenv("CLASSPATH");
83+
LOG.fine(() -> "CLASSPATH=" + classpathEnvVar);
84+
if (classpathEnvVar != null) {
85+
var paths = Stream.of(classpathEnvVar.split(System.getProperty("path.separator"))).map(Path::of).collect(Collectors.toSet());
86+
LOG.fine(() -> "Paths from CLASSPATH = " + paths);
87+
return paths;
88+
}
89+
8190
return Collections.emptySet();
8291
}
8392

src/test/java/org/javacs/InferConfigTest.java

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ public class InferConfigTest {
1616
private InferConfig both = new InferConfig(workspaceRoot, externalDependencies, mavenHome, gradleHome);
1717
private InferConfig gradle = new InferConfig(workspaceRoot, externalDependencies, Paths.get("nowhere"), gradleHome);
1818
private InferConfig thisProject = new InferConfig(Paths.get("."), Set.of());
19+
private InferConfig simpleProject = new InferConfig(Paths.get("src/test/examples/simple-project"), Set.of());
1920

2021
@Test
2122
public void mavenClassPath() {
@@ -35,6 +36,18 @@ public void gradleClasspath() {
3536
// v1.1 should be ignored
3637
}
3738

39+
@Test
40+
public void envVarClasspath() {
41+
// CLASSPATH is set in pom.xml
42+
assertThat(
43+
simpleProject.classPath(),
44+
contains(mavenHome.resolve("repository/com/external/external-library/1.1/external-library-1.1.jar")));
45+
assertThat(
46+
both.classPath(),
47+
not(contains(mavenHome.resolve("repository/com/external/external-library/1.1/external-library-1.1.jar"))));
48+
}
49+
50+
3851
@Test
3952
public void mavenDocPath() {
4053
assertThat(

0 commit comments

Comments
 (0)