Skip to content

Commit

Permalink
Configure incremental compilation and JVM options to improve build time.
Browse files Browse the repository at this point in the history
Change-Id: Iebd9df6ca26736b383b2c38f50caab530144ec78
Closes-Bug: #1770567
  • Loading branch information
danieljasinski committed May 21, 2018
1 parent 993487b commit 418d862
Show file tree
Hide file tree
Showing 17 changed files with 155 additions and 38 deletions.
1 change: 1 addition & 0 deletions .mvn/jvm.config
@@ -0,0 +1 @@
-Xms1024m -Xmx2048m -XX:+TieredCompilation -XX:TieredStopAtLevel=1
1 change: 1 addition & 0 deletions .mvn/maven.config
@@ -0,0 +1 @@
-Dmaven.wagon.http.ssl.insecure=true -Dmaven.wagon.http.ssl.allowall=true -T 2
2 changes: 1 addition & 1 deletion Makefile
Expand Up @@ -7,7 +7,7 @@ JAVA_API_DIR = $(SB_ROOT)/java-api

OUTPUT_FILE = o11nplugin-contrail.vmoapp

MVN = mvn -Drepo.host=$(REPO_HOST) -Dmaven.wagon.http.ssl.insecure=true -Dmaven.wagon.http.ssl.allowall=true
MVN = mvn -Drepo.host=$(REPO_HOST)

.PHONY: repo init sync vmoapp build test clean
.ONESHELL:
Expand Down
Expand Up @@ -22,6 +22,7 @@ fun readProjectInfo(): ProjectInfo {
val coreRoot = configRoot.replace(configPattern, "-core")
val customRoot = configRoot.replace(configPattern, "-custom")
val packageRoot = configRoot.replace(configPattern, "-package")
val generatorRoot = configRoot.replace(configPattern, "-generator")
val version = props["dist.version"] as String
val buildNumber = props["build.number"] as String
val workflowPackage = props["workflow.package"] as String
Expand All @@ -34,6 +35,7 @@ fun readProjectInfo(): ProjectInfo {
coreRoot = coreRoot,
customRoot = customRoot,
packageRoot = packageRoot,
generatorRoot = generatorRoot,
version = version,
baseVersion = baseVersion,
buildNumber = buildNumber,
Expand All @@ -47,6 +49,7 @@ data class ProjectInfo(
val coreRoot: String,
val customRoot: String,
val packageRoot: String,
val generatorRoot: String,
val version: String,
val baseVersion: String,
val buildNumber: String,
Expand Down
5 changes: 4 additions & 1 deletion o11nplugin-contrail-core/pom.xml
Expand Up @@ -36,12 +36,15 @@
<groupId>net.juniper.contrail.vro</groupId>
<artifactId>o11nplugin-contrail-format</artifactId>
</dependency>

<dependency>
<groupId>net.juniper.contrail.vro</groupId>
<artifactId>o11nplugin-contrail-config</artifactId>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>net.juniper.contrail.vro</groupId>
<artifactId>o11nplugin-contrail-generator</artifactId>
</dependency>

<dependency>
<groupId>org.jetbrains.kotlin</groupId>
Expand Down
4 changes: 4 additions & 0 deletions o11nplugin-contrail-custom/pom.xml
Expand Up @@ -29,6 +29,10 @@
<groupId>net.juniper.contrail.vro</groupId>
<artifactId>o11nplugin-contrail-core</artifactId>
</dependency>
<dependency>
<groupId>net.juniper.contrail.vro</groupId>
<artifactId>o11nplugin-contrail-generator</artifactId>
</dependency>
<dependency>
<groupId>com.vmware.o11n</groupId>
<artifactId>o11n-plugin-modeldriven-generator</artifactId>
Expand Down
@@ -0,0 +1,53 @@
package net.juniper.contrail.vro

import com.vmware.o11n.sdk.modeldrivengen.code.CodeGeneratorConfig
import com.vmware.o11n.sdk.modeldrivengen.code.DefaultCodeGeneratorConfig
import com.vmware.o11n.sdk.modeldrivengen.code.DefaultPluginCodeGenerator
import com.vmware.o11n.sdk.modeldrivengen.code.DefaultRuntimeConfigurationGenerator
import com.vmware.o11n.sdk.modeldrivengen.code.PluginCodeGenerator
import com.vmware.o11n.sdk.modeldrivengen.code.RuntimeConfigurationGenerator
import com.vmware.o11n.sdk.modeldrivengen.mapping.AbstractMapping
import com.vmware.o11n.sdk.modeldrivengen.model.Plugin
import net.juniper.contrail.vro.config.packageToPath
import java.nio.file.Files
import java.nio.file.Paths
import javax.inject.Inject
import javax.inject.Singleton

@Singleton
class CustomCodeGenerator @Inject constructor(
private val codeDelegate: DefaultPluginCodeGenerator,
private val configDelegate: DefaultRuntimeConfigurationGenerator,
config: CodeGeneratorConfig,
mapping: AbstractMapping
) : PluginCodeGenerator, RuntimeConfigurationGenerator {
private val generate: Boolean = generationRequired(config, mapping)

init {
if (!generate && config is DefaultCodeGeneratorConfig)
config.isVerbose = false
}

private fun generationRequired(config: CodeGeneratorConfig, mapping: AbstractMapping): Boolean {
val vsoXmlPath = Paths.get(config.javaOutputDir.absolutePath, config.basePackage.packageToPath(), "runtime-config.properties")
if (! Files.exists(vsoXmlPath)) return true
val mappingPath = Paths.get(mapping.javaClass.protectionDomain.codeSource.location.toURI())
val vsoTime = Files.getLastModifiedTime(vsoXmlPath)
val mappingTime = Files.getLastModifiedTime(mappingPath)
return mappingTime > vsoTime
}

override fun generateJavaCode(mapping: AbstractMapping, plugin: Plugin) {
if (generate)
codeDelegate.generateJavaCode(mapping, plugin)
else
println("[INFO] Skipped generation of wrapper classes.")
}

override fun generateRuntimeConfiguration(mapping: AbstractMapping, plugin: Plugin) {
if (generate)
configDelegate.generateRuntimeConfiguration(mapping, plugin)
else
println("[INFO] Skipped generation of runtime configuration.")
}
}
Expand Up @@ -6,6 +6,9 @@ package net.juniper.contrail.vro

import com.google.inject.AbstractModule
import com.google.inject.name.Names
import javax.inject.Singleton
import com.vmware.o11n.sdk.modeldrivengen.code.PluginCodeGenerator
import com.vmware.o11n.sdk.modeldrivengen.code.RuntimeConfigurationGenerator
import com.vmware.o11n.sdk.modeldrivengen.mapping.AbstractMapping
import com.vmware.o11n.sdk.modeldrivengen.model.Plugin
import net.juniper.contrail.vro.config.constants.Contrail
Expand All @@ -22,6 +25,12 @@ class CustomModule : AbstractModule() {
override fun configure() {
bind(AbstractMapping::class.java).toInstance(CustomMapping())
bind(Plugin::class.java).toInstance(plugin)
bind(PluginCodeGenerator::class.java)
.to(CustomCodeGenerator::class.java)
.`in`(Singleton::class.java)
bind(RuntimeConfigurationGenerator::class.java)
.to(CustomCodeGenerator::class.java)
.`in`(Singleton::class.java)
bind(String::class.java)
.annotatedWith(Names.named("codegen.templatePath"))
.toInstance("/net/juniper/contrail/vro")
Expand Down
6 changes: 6 additions & 0 deletions o11nplugin-contrail-gen/pom.xml
Expand Up @@ -68,6 +68,12 @@
<artifactId>o11nplugin-contrail-custom</artifactId>
<version>${project.version}</version>
</dependency>
<!-- This dependency is here just to get rid of a distracting warning during build. -->
<dependency>
<groupId>joda-time</groupId>
<artifactId>joda-time</artifactId>
<version>2.9.9</version>
</dependency>
</dependencies>
</plugin>
</plugins>
Expand Down
Expand Up @@ -8,7 +8,9 @@ val generatedPackageName = "net.juniper.contrail.vro.generated"

val generatedSourcesRoot = "/target/generated-sources"
val generatedTestsRoot = "/target/generated-tests"
val templatePath = "/templates"
val templatesDirName = "templates"
val templatesInClassPath = "/$templatesDirName"
val templatesInResourcesPath = "src/main/resources/$templatesDirName"

val editWarningMessage: String =
"""
Expand Down
Expand Up @@ -14,9 +14,9 @@ import java.io.IOException
import java.nio.file.Files
import java.nio.file.Path

data class GeneratorConfig(val outputDir: Path, val verbose: Boolean = true) {
constructor(baseDir: Path, packageName: String, verbose: Boolean = true) :
this(baseDir.append(packageName.packageToPath()), verbose)
data class GeneratorConfig(val outputDir: Path, val templateDir: Path, val verbose: Boolean = true, val force: Boolean = false) {
constructor(baseDir: Path, templateDir: Path, packageName: String, verbose: Boolean = true) :
this(baseDir.append(packageName.packageToPath()), templateDir, verbose)
}

class GeneratorEngine(private val config: GeneratorConfig, private val freemarker: Configuration) {
Expand All @@ -28,9 +28,14 @@ class GeneratorEngine(private val config: GeneratorConfig, private val freemarke
if (config.verbose)
println("[INFO] Generating code for $fileName using template $templateName")
createPackageStructure()
val templatePath = config.templateDir.append(templateName)
val outputPath = config.outputDir.append(fileName)
if (Files.exists(outputPath) && ! config.force && canSkipGeneration(templatePath, outputPath)) {
println("[INFO] ---- File up-to-date, skipping generating code.")
return
}
val template = freemarker.getTemplate(templateName)
val filePath = config.outputDir.append(fileName)
FileWriter(filePath.toFile()). use { template.process(model, it) }
FileWriter(outputPath.toFile()). use { template.process(model, it) }
}

@Throws(IOException::class)
Expand All @@ -40,6 +45,12 @@ class GeneratorEngine(private val config: GeneratorConfig, private val freemarke
private fun String.toTemplateName(): String =
decapitalize().replace("\\..+?$".toRegex(), ".ftl")

private fun canSkipGeneration(templatePath: Path, outputPath: Path): Boolean {
val templateTime = Files.getLastModifiedTime(templatePath)
val outputTime = Files.getLastModifiedTime(outputPath)
return outputTime > templateTime
}

private fun createPackageStructure() =
Files.createDirectories(config.outputDir)
}
Expand Down
Expand Up @@ -11,7 +11,8 @@ import net.juniper.contrail.vro.config.div
import net.juniper.contrail.vro.config.ProjectInfo
import net.juniper.contrail.vro.generator.generatedPackageName
import net.juniper.contrail.vro.generator.generatedSourcesRoot
import net.juniper.contrail.vro.generator.templatePath
import net.juniper.contrail.vro.generator.templatesInClassPath
import net.juniper.contrail.vro.generator.templatesInResourcesPath

fun generateModel(
info: ProjectInfo,
Expand All @@ -28,17 +29,21 @@ fun generateModel(
val customMappingModel = generateCustomMappingModel(info, objectClasses, rootClasses, propertyClasses, relations, forwardRelations, propertyRelations)
val findersModel = generateFindersModel(objectClasses, propertyRelations)

val templateDir = info.generatorRoot / templatesInResourcesPath

val customMappingConfig = GeneratorConfig(
baseDir = info.customRoot / generatedSourcesRoot,
templateDir = templateDir,
packageName = generatedPackageName)
val customMappingGenerator = GeneratorEngine(customMappingConfig, templatePath)
val customMappingGenerator = GeneratorEngine(customMappingConfig, templatesInClassPath)
customMappingGenerator.generate(customMappingModel, "CustomMapping.kt")

val coreGeneratorConfig = GeneratorConfig(
baseDir = info.coreRoot / generatedSourcesRoot,
templateDir = templateDir,
packageName = generatedPackageName)

val coreGenerator = GeneratorEngine(coreGeneratorConfig, templatePath)
val coreGenerator = GeneratorEngine(coreGeneratorConfig, templatesInClassPath)
coreGenerator.generate(relationsModel, "Relations.kt")
coreGenerator.generate(findersModel, "Finders.kt")
}
10 changes: 9 additions & 1 deletion o11nplugin-contrail-package/pom.xml
Expand Up @@ -19,11 +19,19 @@
<keystorePassword>password123</keystorePassword>
</properties>

<dependencies>
<dependency>
<groupId>net.juniper.contrail.vro</groupId>
<artifactId>o11nplugin-contrail-gen</artifactId>
<version>${project.version}</version>
<scope>provided</scope>
</dependency>
</dependencies>

<build>
<plugins>
<plugin>
<artifactId>maven-resources-plugin</artifactId>
<version>3.0.2</version>
<executions>
<execution>
<id>copy-resources</id>
Expand Down
6 changes: 4 additions & 2 deletions o11nplugin-contrail-tests/pom.xml
Expand Up @@ -21,12 +21,14 @@
<groupId>net.juniper.contrail.vro</groupId>
<artifactId>o11nplugin-contrail-workflows</artifactId>
</dependency>

<dependency>
<groupId>net.juniper.contrail.vro</groupId>
<artifactId>o11nplugin-contrail-core</artifactId>
</dependency>

<dependency>
<groupId>net.juniper.contrail.vro</groupId>
<artifactId>o11nplugin-contrail-gen</artifactId>
</dependency>
<dependency>
<groupId>net.juniper.contrail.vro</groupId>
<artifactId>o11nplugin-contrail-generator</artifactId>
Expand Down
Expand Up @@ -2,7 +2,7 @@
* Copyright (c) 2018 Juniper Networks, Inc. All rights reserved.
*/

package net.juniper.contrail.vro.spring
package net.juniper.contrail.vro.tests.spring

import ch.dunes.vso.sdk.IServiceRegistry
import ch.dunes.vso.sdk.api.IPluginPublisher
Expand Down
20 changes: 0 additions & 20 deletions o11nplugin-contrail/pom.xml
Expand Up @@ -17,25 +17,15 @@
<groupId>net.juniper.contrail.vro</groupId>
<artifactId>o11nplugin-contrail-core</artifactId>
</dependency>
<dependency>
<groupId>net.juniper.contrail.vro</groupId>
<artifactId>o11nplugin-contrail-gen</artifactId>
<version>${project.version}</version>
</dependency>
<dependency>
<groupId>net.juniper.contrail.vro</groupId>
<artifactId>o11nplugin-contrail-package</artifactId>
<type>package</type>
</dependency>
<dependency>
<groupId>org.spockframework</groupId>
<artifactId>spock-core</artifactId>
</dependency>
</dependencies>

<build>
<finalName>o11nplugin-contrail</finalName>
<testSourceDirectory>src/test</testSourceDirectory>
<plugins>
<!-- dar file generation -->
<plugin>
Expand Down Expand Up @@ -112,7 +102,6 @@
<!-- copy deliverable to dist folder -->
<plugin>
<artifactId>maven-resources-plugin</artifactId>
<version>3.0.1</version>
<executions>
<execution>
<id>copy-vmoapp-file</id>
Expand Down Expand Up @@ -148,15 +137,6 @@
</filesets>
</configuration>
</plugin>

<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
</plugin>
<plugin>
<groupId>org.codehaus.gmavenplus</groupId>
<artifactId>gmavenplus-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>

0 comments on commit 418d862

Please sign in to comment.