This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import org.gradle.plugins.ide.idea.IdeaPlugin | |
buildscript { | |
ext { | |
springBootVersion = "1.2.0.RELEASE" | |
} | |
repositories { | |
jcenter() | |
} | |
dependencies { | |
classpath "org.springframework.boot:spring-boot-gradle-plugin:$springBootVersion" | |
} | |
} | |
apply plugin: 'idea' | |
apply plugin: 'groovy' | |
apply plugin: 'spring-boot' | |
repositories { | |
jcenter() | |
} | |
dependencies { | |
runtime 'org.springframework:springloaded:1.2.0.RELEASE' | |
compile 'org.codehaus.groovy:groovy-all:2.4.0' | |
compile "org.springframework.boot:spring-boot-starter-actuator" | |
compile "org.springframework.boot:spring-boot-starter-web" | |
} | |
// apply the configuration | |
def ideaPlugin = project == project.rootProject ? project.getPlugins().findPlugin(IdeaPlugin) : project.rootProject.getPlugins().findPlugin(IdeaPlugin) | |
applyWorkspaceConfig(project.name, project.projectDir.canonicalPath, getSpringloadedJvmArgs(project), "app.Main", ideaPlugin.model.workspace.iws) | |
void applyWorkspaceConfig(String projectName, String projectDir, String springLoadedJvmArgs, String appClassName, XmlFileContentMerger iws) { | |
iws.withXml { provider -> | |
def node = provider.asNode() | |
def runManagerConfig = node['component'].find { it.'@name' == 'RunManager' } as Node | |
if (!runManagerConfig) { | |
runManagerConfig = node.appendNode('component', [name: 'RunManager']) | |
} | |
runManagerConfig.append(new XmlParser().parseText(""" | |
<configuration default="false" name="Run ${projectName}" type="Application" factoryName="Application"> | |
<extension name="coverage" enabled="false" merge="false" /> | |
<option name="MAIN_CLASS_NAME" value="${appClassName}" /> | |
<option name="VM_PARAMETERS" value="${springLoadedJvmArgs ? '"' + springLoadedJvmArgs + '" "-noverify"' : ''}" /> | |
<option name="PROGRAM_PARAMETERS" value="" /> | |
<option name="WORKING_DIRECTORY" value="${projectDir}" /> | |
<option name="ALTERNATIVE_JRE_PATH_ENABLED" value="false" /> | |
<option name="ALTERNATIVE_JRE_PATH" value="" /> | |
<option name="ENABLE_SWING_INSPECTOR" value="false" /> | |
<option name="ENV_VARIABLES" /> | |
<option name="PASS_PARENT_ENVS" value="true" /> | |
<module name="${projectName}" /> | |
<envs /> | |
<RunnerSettings RunnerId="Debug"> | |
<option name="DEBUG_PORT" value="63810" /> | |
<option name="TRANSPORT" value="0" /> | |
<option name="LOCAL" value="true" /> | |
</RunnerSettings> | |
<RunnerSettings RunnerId="Run" /> | |
<ConfigurationWrapper RunnerId="Debug" /> | |
<ConfigurationWrapper RunnerId="Run" /> | |
<method /> | |
</configuration> | |
""")) | |
} | |
} | |
String getSpringloadedJvmArgs(Project project) { | |
def mainSourceSet = project.convention.getPlugin(JavaPluginConvention).sourceSets.main | |
def jarFile = JarFinder.find("org.springsource.loaded.SpringLoaded", mainSourceSet.runtimeClasspath.files) | |
if (jarFile) { | |
"-javaagent:${jarFile.absolutePath}" | |
} else { | |
"" | |
} | |
} | |
class JarFinder { | |
static File find(String className, Collection<File> classpath) { | |
findJarFile(maybeLoadClass(className, toClassLoader(classpath))) | |
} | |
private static File findJarFile(Class<?> targetClass) { | |
if (targetClass) { | |
String absolutePath = targetClass.getResource('/' + targetClass.getName().replace(".", "/") + ".class").path | |
String jarPath = absolutePath.substring("file:".length(), absolutePath.lastIndexOf("!")) | |
new File(jarPath) | |
} else { | |
null | |
} | |
} | |
private static ClassLoader toClassLoader(Collection<File> classpath) { | |
List<URL> urls = new ArrayList<URL>(classpath.size()) | |
for (File file in classpath) { | |
try { | |
urls.add(file.toURI().toURL()) | |
} catch (MalformedURLException ignore) { | |
} | |
} | |
new URLClassLoader(urls as URL[]) | |
} | |
private static Class<?> maybeLoadClass(String className, ClassLoader classLoader) { | |
if (classLoader) { | |
try { | |
return classLoader.loadClass(className) | |
} catch (ClassNotFoundException ignore) { | |
} | |
} | |
null | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment