diff --git a/src/main/kotlin/kscript/app/DependencyUtil.kt b/src/main/kotlin/kscript/app/DependencyUtil.kt index bfc0d901..bdc109df 100644 --- a/src/main/kotlin/kscript/app/DependencyUtil.kt +++ b/src/main/kotlin/kscript/app/DependencyUtil.kt @@ -117,11 +117,20 @@ internal fun buildPom(depIds: List, customRepos: List): Strin quit(1) } + // replace + with open version range for maven + val version = matchResult.groupValues[3].let { + if(it.endsWith("+")) { + "[${it.dropLast(1)},)" + } else { + it + } + } + """ ${matchResult.groupValues[1]} ${matchResult.groupValues[2]} - ${matchResult.groupValues[3]} + $version ${matchResult.groups[5]?.let { "" + it.value + "" } ?: ""} ${matchResult.groups[7]?.let { "" + it.value + "" } ?: ""} diff --git a/src/main/kotlin/kscript/app/Script.kt b/src/main/kotlin/kscript/app/Script.kt index 9018a61b..3471c54d 100644 --- a/src/main/kotlin/kscript/app/Script.kt +++ b/src/main/kotlin/kscript/app/Script.kt @@ -97,7 +97,7 @@ private fun extractEntryPoint(line: String) = when { line.contains(ENTRY_ANNOT_PREFIX) -> line .replaceFirst(ENTRY_ANNOT_PREFIX, "") - .split(")")[0].trim(' ', '"') + .substringBeforeLast(")").trim(' ', '"') line.startsWith(ENTRY_COMMENT_PREFIX) -> line.split("[ ]+".toRegex()).last() else -> @@ -158,13 +158,13 @@ internal fun extractDependencies(line: String) = when { line.contains(DEPS_ANNOT_PREFIX) -> line .replaceFirst(DEPS_ANNOT_PREFIX, "") .extractAnnotParams() -// .split(")")[0].split(",") +// ..substringBeforeLast(")").split(",") // .map { it.trim(' ', '"') } line.contains(DEPSMAVEN_ANNOT_PREFIX) -> line .replaceFirst(DEPSMAVEN_ANNOT_PREFIX, "") - .split(")")[0].trim(' ', '"').let { listOf(it) } + .substringBeforeLast(")").trim(' ', '"').let { listOf(it) } line.startsWith(DEPS_COMMENT_PREFIX) -> line.split("[ ;,]+".toRegex()).drop(1).map(String::trim) @@ -195,7 +195,7 @@ fun Script.collectRepos(): List { // @file:MavenRepository("imagej", "http://maven.imagej.net/content/repositories/releases/") return lines .filter { it.contains(dependsOnMavenPrefix) } - .map { it.replaceFirst(dependsOnMavenPrefix, "").split(")")[0] } + .map { it.replaceFirst(dependsOnMavenPrefix, "").substringBeforeLast(")") } .map { it.split(",").map { it.trim(' ', '"', '(') }.let { MavenRepo(it[0], it[1]) } } // todo add credential support https://stackoverflow.com/questions/36282168/how-to-add-custom-maven-repository-to-gradle diff --git a/src/test/kotlin/Tests.kt b/src/test/kotlin/Tests.kt index fc1d3425..38b84b8c 100644 --- a/src/test/kotlin/Tests.kt +++ b/src/test/kotlin/Tests.kt @@ -49,7 +49,7 @@ class Tests { @Test fun parseAnnotWithTypeAndClassifier() { - val pom = buildPom(listOf("org.javamoney:moneta:1.3", "org.javamoney:moneta:1.3:pom", "org.javamoney:moneta:1.3@pom"), emptyList()) + val pom = buildPom(listOf("org.javamoney:moneta:1.3", "org.javamoney:moneta:1.3:pom", "org.javamoney:moneta:1.3@pom", "org.javamoney:moneta:1.3+"), emptyList()) val expected = "" + " \n" + @@ -77,6 +77,15 @@ class Tests { " \n" + " pom\n" + " " + " \n" + + "\n" + + " \n" + + " org.javamoney\n" + + " moneta\n" + + " [1.3,)\n" + + " \n" + + " \n" + + " \n" + assertTrue(pom.contains(expected)) } diff --git a/test/resources/depends_on_dynamic.kts b/test/resources/depends_on_dynamic.kts new file mode 100755 index 00000000..d2fe6dce --- /dev/null +++ b/test/resources/depends_on_dynamic.kts @@ -0,0 +1,18 @@ +#!/usr/bin/env kscript + + +@file:DependsOn("log4j:log4j:1.2+") +//DEPS com.offbytwo:docopt:0.6.0.+ +// neither should having comments after declartions + +// some pointless comment + +import org.docopt.Docopt + +// test the docopt dependency +val docopt = Docopt("Usage: jl [options] []") + +// instantiate a logger to test the log4j dependency +org.apache.log4j.Logger.getRootLogger() + +println("dynamic kscript rocks!") \ No newline at end of file diff --git a/test/test_suite.sh b/test/test_suite.sh index def38314..79bc9869 100755 --- a/test/test_suite.sh +++ b/test/test_suite.sh @@ -152,6 +152,9 @@ assert "kscript ${KSCRIPT_HOME}/test/resources/depends_on_annot.kts" "kscript wi # make sure that @file:DependsOnMaven is parsed correctly assert "kscript ${KSCRIPT_HOME}/test/resources/depends_on_maven_annot.kts" "kscript with annotations rocks!" +# make sure that dynamic versions are matched properly +assert "kscript ${KSCRIPT_HOME}/test/resources/depends_on_dynamic.kts" "dynamic kscript rocks!" + # make sure that @file:MavenRepository is parsed correctly assert "kscript ${KSCRIPT_HOME}/test/resources/custom_mvn_repo_annot.kts" "kscript with annotations rocks!"