实际上在Forge Mod项目中给IDE添加JVM参数是一个比较常见的需求,如Forge要求添加这样一个JVM参数启动Coremod:
-Dfml.coreMods.load=com.example.yourpackage.YourCoremodClass
然后每次都要在IDE中手动添加的我终于有一天忍不住了,决定在build.gradle
中自己写一段自动添加JVM参数的脚本,然后这也是这篇Post存在的意义。
脚本的内容很简单。想要用的话,直接在build.gradle
文件里找个空行把这段代码扔进去就行了,最后别忘了重新生成IDE的配置文件,也就是执行gradle cleanEclipse eclipse
或者gradle cleanIdea idea
指令:
ext.jvmArguments = [
'-Dfml.coreMods.load=com.example.yourpackage.YourCoremodClass'
]
makeEclipseCleanRunClient.doFirst {
def jvmArg = String.join(' ', jvmArguments)
it.setJvmArguments(jvmArg)
}
makeEclipseCleanRunServer.doFirst {
def jvmArg = String.join(' ', jvmArguments)
it.setJvmArguments(jvmArg)
}
idea.workspace.iws.withXml {
def runManager = it.asNode().component.find({ it.@name == 'RunManager' })
runManager.configuration.findAll({ it.@type == 'Application' }).each {
def mainClass = it.option.find({ it.@name == 'MAIN_CLASS_NAME' }).@value
if (mainClass == 'GradleStart' || mainClass == 'GradleStartServer') {
def jvmArg = String.join(' ', jvmArguments)
it.option.find({ it.@name == 'VM_PARAMETERS' }).@value = jvmArg
}
}
}
最上面那个ext.jvmArgs
用于设置JVM参数(可以加多个,然后正如后面的代码所描述的那样,后面会使用空格作为分隔符拼起来),下面几段代码,大家应该都很容易看出来,一部分是用于Eclipse的,一部分是用于IntelliJIDEA的。
因为ForgeGradle没直接提供操作IntelliJIDEA中的JVM参数的接口,所以代码要长一些(但为什么Eclipse提供了呢)。