在Forge Mod项目中给IDE添加JVM参数

实际上在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提供了呢)。