diff --git a/build.gradle.kts b/build.gradle.kts index ffe5fa1de..b5ebe1453 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -1,24 +1,21 @@ import org.jetbrains.kotlin.gradle.tasks.KotlinCompile -object BuildProps { - const val version = "1.3.60-release-155" -} +val kotlinVersion: String by System.getProperties() group = "com.compiler.server" -version = "${BuildProps.version}-SNAPSHOT" +version = "compiler-server-$kotlinVersion-SNAPSHOT" java.sourceCompatibility = JavaVersion.VERSION_1_8 -val kotlinDependency by configurations.creating -val kotlinJsDependency by configurations.creating -val libJVMFolder: String by System.getProperties() -val libJSFolder: String by System.getProperties() +val kotlinDependency: Configuration by configurations.creating +val kotlinJsDependency: Configuration by configurations.creating +val libJSFolder = "$kotlinVersion-js" val copyDependencies by tasks.creating(Copy::class) { from(kotlinDependency) - into(libJVMFolder) + into(kotlinVersion) } val copyJSDependencies by tasks.creating(Copy::class) { - from(files(Callable { kotlinJsDependency.map {zipTree(it)} })) + from(files(Callable { kotlinJsDependency.map { zipTree(it)} })) into(libJSFolder) } @@ -41,49 +38,49 @@ allprojects { } } -rootDir.resolve("src/main/resources/application.properties").apply{ +rootDir.resolve("src/main/resources/libraries.properties").apply{ println(absolutePath) parentFile.mkdirs() writeText(""" - kotlin.version=${BuildProps.version} - libraries.folder.jvm=${libJVMFolder} + # this file is autogenerated by build.gradle.kts + kotlin.version=${kotlinVersion} + libraries.folder.jvm=${kotlinVersion} libraries.folder.js=${libJSFolder} """.trimIndent()) } dependencies { + kotlinDependency("junit:junit:4.12") + kotlinDependency("org.hamcrest:hamcrest-core:1.3") + kotlinDependency("com.fasterxml.jackson.module:jackson-module-kotlin:2.9.10") + kotlinDependency("org.jetbrains.kotlin:kotlin-stdlib-jdk8:$kotlinVersion") + kotlinDependency("org.jetbrains.kotlin:kotlin-reflect:$kotlinVersion") + kotlinDependency("org.jetbrains.kotlinx:kotlinx-coroutines-core:1.3.2") { + exclude(group = "org.jetbrains.kotlin", module = "kotlin-stdlib") + } + kotlinJsDependency("org.jetbrains.kotlin:kotlin-stdlib-js:$kotlinVersion") + implementation("org.springframework.boot:spring-boot-starter-web") implementation("junit:junit:4.12") + implementation("org.jetbrains.intellij.deps:trove4j:1.0.20181211") + implementation("org.jetbrains.kotlin:kotlin-reflect:$kotlinVersion") + implementation("org.jetbrains.kotlin:kotlin-stdlib:$kotlinVersion") + implementation("org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlinVersion") + implementation("org.jetbrains.kotlin:kotlin-stdlib-jdk8:$kotlinVersion") + implementation("org.jetbrains.kotlin:kotlin-test:$kotlinVersion") + implementation("org.jetbrains.kotlin:kotlin-compiler:$kotlinVersion") + implementation("org.jetbrains.kotlin:kotlin-script-runtime:$kotlinVersion") + implementation("org.jetbrains.kotlin:kotlin-stdlib-js:$kotlinVersion") + implementation("org.jetbrains.kotlin:kotlin-plugin-ij193:$kotlinVersion") { + isTransitive = false + } + implementation(project(":executors")) + testImplementation("org.springframework.boot:spring-boot-starter-test") { exclude(group = "org.junit.vintage", module = "junit-vintage-engine") } testImplementation("org.jetbrains.kotlinx:kotlinx-coroutines-test:1.3.2") - with(BuildProps) { - kotlinDependency("junit:junit:4.12") - kotlinDependency("org.hamcrest:hamcrest-core:1.3") - kotlinDependency("com.fasterxml.jackson.module:jackson-module-kotlin:2.9.10") - kotlinDependency("org.jetbrains.kotlin:kotlin-stdlib-jdk8:$version") - kotlinDependency("org.jetbrains.kotlin:kotlin-reflect:$version") - kotlinDependency("org.jetbrains.kotlinx:kotlinx-coroutines-core:1.3.2") { - exclude(group = "org.jetbrains.kotlin", module = "kotlin-stdlib") - } - kotlinJsDependency("org.jetbrains.kotlin:kotlin-stdlib-js:$version") - - compile("org.jetbrains.intellij.deps:trove4j:1.0.20181211") - compile("org.jetbrains.kotlin:kotlin-reflect:$version") - compile("org.jetbrains.kotlin:kotlin-stdlib:$version") - compile("org.jetbrains.kotlin:kotlin-stdlib-jdk7:$version") - compile("org.jetbrains.kotlin:kotlin-stdlib-jdk8:$version") - compile("org.jetbrains.kotlin:kotlin-test:$version") - compile("org.jetbrains.kotlin:kotlin-compiler:$version") - compile("org.jetbrains.kotlin:kotlin-script-runtime:$version") - compile("org.jetbrains.kotlin:kotlin-stdlib-js:$version") - compile("org.jetbrains.kotlin:kotlin-plugin-ij193:$version") { - isTransitive = false - } - } - compile(project(":executors")) } tasks.withType { diff --git a/executors/build.gradle.kts b/executors/build.gradle.kts index 6f1f462a9..710a385f6 100644 --- a/executors/build.gradle.kts +++ b/executors/build.gradle.kts @@ -1,3 +1,5 @@ +val kotlinVersion: String by System.getProperties() + plugins { kotlin("jvm") } @@ -7,5 +9,5 @@ dependencies { } tasks.withType().getByName("jar") { - destinationDirectory.set(File("../lib")) + destinationDirectory.set(File("../$kotlinVersion")) } \ No newline at end of file diff --git a/gradle.properties b/gradle.properties index 6f5a342cc..04bdcbe79 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,2 +1 @@ -systemProp.libJVMFolder=lib -systemProp.libJSFolder=js \ No newline at end of file +systemProp.kotlinVersion=1.3.60-release-155 \ No newline at end of file diff --git a/src/main/kotlin/com/compiler/server/compiler/components/KotlinCompiler.kt b/src/main/kotlin/com/compiler/server/compiler/components/KotlinCompiler.kt index bd4f4be34..ff3ba899c 100644 --- a/src/main/kotlin/com/compiler/server/compiler/components/KotlinCompiler.kt +++ b/src/main/kotlin/com/compiler/server/compiler/components/KotlinCompiler.kt @@ -19,6 +19,7 @@ import org.jetbrains.kotlin.load.kotlin.PackagePartClassUtils import org.jetbrains.kotlin.psi.KtFile import org.jetbrains.kotlin.resolve.BindingContext import org.jetbrains.kotlin.util.prefixIfNot +import org.springframework.beans.factory.annotation.Value import org.springframework.stereotype.Component import java.io.File import java.nio.file.Files @@ -30,7 +31,8 @@ class KotlinCompiler( private val errorAnalyzer: ErrorAnalyzer, private val kotlinEnvironment: KotlinEnvironment, private val javaExecutor: JavaExecutor, - private val librariesFolderProperties: LibrariesFolderProperties + private val librariesFolderProperties: LibrariesFolderProperties, + private val policyFile: File ) { class Compiled(val files: Map = emptyMap(), val mainClass: String? = null) @@ -94,10 +96,10 @@ class KotlinCompiler( val dirPrefix = if (libDir.isEmpty()) libDir else libDir.prefixIfNot("/") val sessionId = UUID.randomUUID().toString().replace("-", "") val outputDir = Paths.get(dir, "generated", sessionId) - val policy = File("executor.policy").readText() + val policy = policyFile.readText() .replace("%%GENERATED%%", outputDir.toString()) .replace("%%LIB_DIR%%", dir + dirPrefix) - outputDir.resolve("executor.policy").apply { parent.toFile().mkdirs() }.toFile().writeText(policy) + outputDir.resolve(policyFile.name).apply { parent.toFile().mkdirs() }.toFile().writeText(policy) return OutputDirectory(outputDir, compiled.files.map { (name, bytes) -> outputDir.resolve(name).let { path -> path.parent.toFile().mkdirs() @@ -125,7 +127,7 @@ class KotlinCompiler( ): List { val classPaths = (kotlinEnvironment.classpath.map { it.absolutePath } + outputDirectory.path.toAbsolutePath().toString()) .joinToString(":") - val policy = outputDirectory.path.resolve("executor.policy").toAbsolutePath() + val policy = outputDirectory.path.resolve(policyFile.name).toAbsolutePath() return CommandLineArgument( classPaths = classPaths, mainClass = mainClass, diff --git a/src/main/kotlin/com/compiler/server/configuration/ApplicationConfiguration.kt b/src/main/kotlin/com/compiler/server/configuration/ApplicationConfiguration.kt index 064d7f3b4..5a38506df 100644 --- a/src/main/kotlin/com/compiler/server/configuration/ApplicationConfiguration.kt +++ b/src/main/kotlin/com/compiler/server/configuration/ApplicationConfiguration.kt @@ -6,28 +6,35 @@ import org.springframework.boot.context.properties.ConfigurationProperties import org.springframework.boot.context.properties.EnableConfigurationProperties import org.springframework.context.annotation.Bean import org.springframework.context.annotation.Configuration +import org.springframework.context.annotation.PropertySource +import org.springframework.core.io.ResourceLoader import org.springframework.format.FormatterRegistry import org.springframework.web.servlet.config.annotation.WebMvcConfigurer +import java.io.File @Configuration -@EnableConfigurationProperties(value = [LibrariesFolderProperties::class]) class ApplicationConfiguration( - @Value("\${kotlin.version}") private val version: String + @Value("\${policy.file}") private val policyFileName: String, + private val resourceLoader: ResourceLoader ) : WebMvcConfigurer { override fun addFormatters(registry: FormatterRegistry) { registry.addConverter(ProjectConverter()) } @Bean - fun versionInfo() = VersionInfo( - version = version, - stdlibVersion = version - ) + fun policyFile(): File = resourceLoader.getResource(ResourceLoader.CLASSPATH_URL_PREFIX + policyFileName).file +} +@Configuration +@PropertySource(value = [ResourceLoader.CLASSPATH_URL_PREFIX + "libraries.properties"]) +@EnableConfigurationProperties(value = [LibrariesFolderProperties::class]) +class KotlinLibrariesConfiguration(@Value("\${kotlin.version}") private val version: String) { + @Bean + fun versionInfo() = VersionInfo(version = version, stdlibVersion = version) } @ConfigurationProperties(prefix = "libraries.folder") -class LibrariesFolderProperties{ +class LibrariesFolderProperties { lateinit var jvm: String lateinit var js: String } \ No newline at end of file diff --git a/src/main/resources/application.properties b/src/main/resources/application.properties index b5acd8300..97e04c399 100644 --- a/src/main/resources/application.properties +++ b/src/main/resources/application.properties @@ -1,3 +1 @@ -kotlin.version=1.3.60-release-155 -libraries.folder.jvm=lib -libraries.folder.js=js \ No newline at end of file +policy.file=executor.policy \ No newline at end of file diff --git a/executor.policy b/src/main/resources/executor.policy similarity index 100% rename from executor.policy rename to src/main/resources/executor.policy diff --git a/src/main/resources/libraries.properties b/src/main/resources/libraries.properties new file mode 100644 index 000000000..538787fec --- /dev/null +++ b/src/main/resources/libraries.properties @@ -0,0 +1,4 @@ +# this file is autogenerated by build.gradle.kts +kotlin.version=1.3.60-release-155 +libraries.folder.jvm=1.3.60-release-155 +libraries.folder.js=1.3.60-release-155-js \ No newline at end of file