Skip to content

Commit

Permalink
Merge pull request #4 from benoitdesire/master
Browse files Browse the repository at this point in the history
Support JDK10+ version-string format
  • Loading branch information
benoitdesire authored Dec 18, 2020
2 parents e7955ba + 60dff0d commit 1cb7700
Show file tree
Hide file tree
Showing 7 changed files with 350 additions and 30 deletions.
40 changes: 21 additions & 19 deletions build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -23,13 +23,13 @@ subprojects {
apply plugin: 'java'
apply plugin: 'info.solidsoft.pitest'

sourceCompatibility = '1.7'
targetCompatibility = '1.7'
sourceCompatibility = '1.8'
targetCompatibility = '1.8'

[compileJava, compileTestJava]*.options*.encoding = 'UTF-8'

group = "co.paralleluniverse"
version = "1.0.4-SNAPSHOT"
version = "1.0.4-ullink3"
status = "integration"
description = "Simple Java deployment"
ext.url = "https://github.com/puniverse/capsule"
Expand Down Expand Up @@ -112,9 +112,9 @@ subprojects {
// xml.destination = "${buildDir}/reports/jacoco/test/jacocoTestReport_${project.name}.xml"
}
}

// check.dependsOn jacocoTestReport

javadoc {
options.links = [ "http://docs.oracle.com/javase/7/docs/api/" ]
}
Expand All @@ -133,19 +133,21 @@ subprojects {
// options.compilerArgs << "-Xlint:unchecked" << "-Xlint:deprecation"
// }

task javancss(dependsOn: 'classes') << {
ant {
logging.level = LogLevel.INFO
taskdef(name:'javancss', classname:'javancss.JavancssAntTask', classpath: configurations.javancss.asPath)
javancss(
srcdir:'src/main/java',
abortOnFail:'true',
generateReport:'true',
packageMetrics:'true',
classMetrics:'false',
functionMetrics:'false'
// outputFile: reportName,
)
task javancss(dependsOn: 'classes') {
doLast {
ant {
logging.level = LogLevel.INFO
taskdef(name: 'javancss', classname: 'javancss.JavancssAntTask', classpath: configurations.javancss.asPath)
javancss(
srcdir: 'src/main/java',
abortOnFail: 'true',
generateReport: 'true',
packageMetrics: 'true',
classMetrics: 'false',
functionMetrics: 'false'
// outputFile: reportName,
)
}
}
}

Expand Down Expand Up @@ -249,7 +251,7 @@ task jacocoRootReport(type: org.gradle.testing.jacoco.tasks.JacocoReport) {
html.enabled = true
xml.enabled = true
csv.enabled = false
xml.destination = "${buildDir}/reports/jacoco/test/jacocoTestReport.xml"
xml.destination file("${buildDir}/reports/jacoco/test/jacocoTestReport.xml")
}
}

Expand Down
36 changes: 25 additions & 11 deletions capsule/src/main/java/Capsule.java
Original file line number Diff line number Diff line change
Expand Up @@ -2536,11 +2536,14 @@ private List<String> buildJVMArgs() {
for (String a : getAttribute(ATTR_JVM_ARGS)) {
a = a.trim();
if (!a.isEmpty() && !a.startsWith("-Xbootclasspath:") && !a.startsWith("-javaagent:"))
{
a = expand(a);
if (!addJava9ModulesJvmArg(a, jvmArgs)) {
if (!addJava9ModulesJvmArg(a, jvmArgs))
{
a = toNativePath(a);
jvmArgs.put(getJvmArgKey(a), a);
}
}
}

return new ArrayList<String>(jvmArgs.values());
Expand Down Expand Up @@ -4278,7 +4281,7 @@ private static Path getJavaExecutable0(Path javaHome) {
return javaHome.resolve("bin").resolve(exec + (isWindows() ? ".exe" : ""));
}

private static final Pattern PAT_JAVA_VERSION_LINE = Pattern.compile(".*?\"(.+?)\"");
private static final Pattern PAT_JAVA_VERSION_LINE = Pattern.compile(".*?\"(.+?)\".*");

private static String getActualJavaVersion(Path javaHome) {
try {
Expand Down Expand Up @@ -4349,7 +4352,7 @@ protected static final int compareVersions(String a, String b) {
}

private static int compareVersions(int[] a, int[] b) {
return compareVersions(a, b, 5);
return compareVersions(a, b, Math.min(a.length, b.length));
}

private static int compareVersions(int[] a, int[] b, int n) {
Expand All @@ -4368,19 +4371,27 @@ private static boolean equals(int[] a, int[] b, int n) {
return true;
}

private static final Pattern PAT_JAVA_VERSION = Pattern.compile("(?<major>\\d+)(\\.(?<minor>\\d+))?(?:\\.(?<patch>\\d+))?(_(?<update>\\d+))?(-(?<pre>[^-]+))?(-(?<build>.+))?");
private static final Pattern PAT_JAVA_VERSION = Pattern.compile("(?<major>1)(\\.(?<minor>\\d+))?(?:\\.(?<patch>\\d+))?(_(?<update>\\d+))?(-(?<pre>[^-]+))?(-(?<build>.+))?");
// from https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/lang/Runtime.Version.html
private static final Pattern PAT_JAVA_VERSION_JDK10 = Pattern.compile("(?<major>\\d+)(\\.(?<minor>\\d+))?(?:\\.(?<patch>\\d+))?(\\.(?<update>\\d+))?(-(?<pre>[^-]+))?.*");

// visible for testing
static int[] parseJavaVersion(String v) {
final Matcher m = PAT_JAVA_VERSION.matcher(v);
Matcher m = PAT_JAVA_VERSION.matcher(v);
if (!m.matches())
throw new IllegalArgumentException("Could not parse version: " + v);
{
m = PAT_JAVA_VERSION_JDK10.matcher(v);
if (!m.matches())
{
throw new IllegalArgumentException("Could not parse version: " + v);
}
}
final int[] ver = new int[5];
ver[0] = toInt(m.group("major"));
ver[1] = toInt(m.group("minor"));
ver[2] = toInt(m.group("patch"));
ver[3] = toInt(m.group("update"));
if (ver[0] > 1 && ver[1] == 0) {
if (ver[0] > 1 && ver[0] < 9 && ver[1] == 0) {
ver[1] = ver[0];
ver[0] = 1;
}
Expand All @@ -4403,7 +4414,10 @@ static String toJavaVersionString(int[] version) {
sb.append(version[1]).append('.');
sb.append(version[2]);
if (version.length > 3 && version[3] > 0)
sb.append('_').append(version[3]);
{
char sep = version[0]>9 ? '.':'_';
sb.append(sep).append(version[3]);
}
if (version.length > 4 && version[4] != 0) {
final String pre;
switch (version[4]) {
Expand Down Expand Up @@ -5593,11 +5607,11 @@ private void overridePlatformMBeanServer() {

if (platformMBeanServer instanceof com.sun.jmx.mbeanserver.JmxMBeanServer) {
final MBeanServer interceptor = (MBeanServer) Proxy.newProxyInstance(MY_CLASSLOADER, new Class<?>[]{MBeanServer.class}, this);

Field interceptorField = accessible(com.sun.jmx.mbeanserver.JmxMBeanServer.class.getDeclaredField("mbsInterceptor"));
// this.origMBeanServer = ((com.sun.jmx.mbeanserver.JmxMBeanServer) platformMBeanServer).getMBeanServerInterceptor();
// this.origMBeanServer = ((com.sun.jmx.mbeanserver.JmxMBeanServer) platformMBeanServer).getMBeanServerInterceptor();
this.origMBeanServer = (MBeanServer) interceptorField.get(platformMBeanServer);
// ((com.sun.jmx.mbeanserver.JmxMBeanServer) platformMBeanServer).setMBeanServerInterceptor(interceptor);
// ((com.sun.jmx.mbeanserver.JmxMBeanServer) platformMBeanServer).setMBeanServerInterceptor(interceptor);
interceptorField.set(platformMBeanServer, interceptor);
}
// accessible(ManagementFactory.class.getDeclaredField("platformMBeanServer")).set(null, this);
Expand Down
43 changes: 43 additions & 0 deletions capsule/src/test/java/CapsuleTest.java
Original file line number Diff line number Diff line change
Expand Up @@ -1317,13 +1317,56 @@ public void testParseJavaVersion() {
assertEquals("1.8.0_30-ea", Capsule.toJavaVersionString(ver));
}

@Test
public void testParseJavaVersion9plus()
{
int[] ver;

ver = Capsule.parseJavaVersion("11");
assertArrayEquals(ver, ints(11, 0, 0, 0, 0));
assertEquals("11.0.0", Capsule.toJavaVersionString(ver));

ver = Capsule.parseJavaVersion("11.0.9");
assertArrayEquals(ver, ints(11, 0, 9, 0, 0));
assertEquals("11.0.9", Capsule.toJavaVersionString(ver));

ver = Capsule.parseJavaVersion("11.0.9-ea");
assertArrayEquals(ver, ints(11, 0, 9, 0, -3));
assertEquals("11.0.9-ea", Capsule.toJavaVersionString(ver));

ver = Capsule.parseJavaVersion("11.0.9.1");
assertArrayEquals(ver, ints(11, 0, 9, 1, 0));
assertEquals("11.0.9.1", Capsule.toJavaVersionString(ver));

ver = Capsule.parseJavaVersion("11.2.9.1");
assertArrayEquals(ver, ints(11, 2, 9, 1, 0));
assertEquals("11.2.9.1", Capsule.toJavaVersionString(ver));

ver = Capsule.parseJavaVersion("11.0.9.1-ea");
assertArrayEquals(ver, ints(11, 0, 9, 1, -3));
assertEquals("11.0.9.1-ea", Capsule.toJavaVersionString(ver));

ver = Capsule.parseJavaVersion("11.0.9.1-ea+1-opt");
assertArrayEquals(ver, ints(11, 0, 9, 1, -3));
assertEquals("11.0.9.1-ea", Capsule.toJavaVersionString(ver));

ver = Capsule.parseJavaVersion("11.0.9.1+-opt");
assertArrayEquals(ver, ints(11, 0, 9, 1, 0));
assertEquals("11.0.9.1", Capsule.toJavaVersionString(ver));

ver = Capsule.parseJavaVersion("9.0.1+-opt");
assertArrayEquals(ver, ints(9, 0, 1, 0, 0));
assertEquals("9.0.1", Capsule.toJavaVersionString(ver));
}

@Test
public void testCompareVersions() {
assertTrue(Capsule.compareVersions("1.8.0_30-ea", "1.8.0_30") < 0);
assertTrue(Capsule.compareVersions("1.8.0_30-ea", "1.8.0_20") > 0);
assertTrue(Capsule.compareVersions("1.8.0-ea", "1.8.0_20") < 0);
assertTrue(Capsule.compareVersions("1.8.0-ea", "1.8.0") < 0);
assertTrue(Capsule.compareVersions("1.8.0-ea", "1.7.0") > 0);
assertTrue(Capsule.compareVersions("11", "10.0.1.0") > 0);
}

@Test
Expand Down
Binary file added gradle/wrapper/gradle-wrapper.jar
Binary file not shown.
5 changes: 5 additions & 0 deletions gradle/wrapper/gradle-wrapper.properties
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-5.2.1-bin.zip
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
Loading

0 comments on commit 1cb7700

Please sign in to comment.