解释:
Gradle中有一个Eclipse插件,允许从Gradle模型中修改生成Eclipse配置的行为。该插件有一个子功能称为“classpath”,允许修改Eclipse生成的.classpath文件。
代码:
import org.gradle.plugins.ide.eclipse.model.AccessRule
apply plugin: 'java'
apply plugin: 'eclipse'
eclipse {
classpath {
file {
whenMerged {
def jre = entries.find { it.path.contains 'org.eclipse.jdt.launching.JRE_CONTAINER' }
jre.accessRules.add(new AccessRule('0', 'com/**'))
jre.accessRules.add(new AccessRule('0', 'sun/**'))
}
}
}
}
来源:https://discuss.gradle.org/t/buildship-1-0-18-is-now-available/19012(“Access Rules”部分)
参数解释:
'0'
= 可访问的
'1'
= 不可访问的
'2'
= 不建议使用的
我个人的使用方式如下:
eclipse.classpath {
file.whenMerged {
entries.each { source ->
if (source.kind == 'con' && source.path.startsWith('org.eclipse.jdt.launching.JRE_CONTAINER')) {
source.accessRules.add(new AccessRule('0', 'sun/applet/AppletAudioClip'))
source.accessRules.add(new AccessRule('0', 'javax/swing/**'))
source.accessRules.add(new AccessRule('0', 'com/sun/java/swing/**'))
source.accessRules.add(new AccessRule('0', 'javafx/**'))
source.accessRules.add(new AccessRule('0', 'sun/net/www/protocol/**'))
}
}
}
}
输出结果如下:
<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8/">
<accessrules>
<accessrule kind="accessible" pattern="sun/applet/AppletAudioClip"/>
<accessrule kind="accessible" pattern="javax/swing/**"/>
<accessrule kind="accessible" pattern="com/sun/java/swing/**"/>
<accessrule kind="accessible" pattern="javafx/**"/>
<accessrule kind="accessible" pattern="sun/net/www/protocol/**"/>
</accessrules>
</classpathentry>
已测试并可与以下版本配合使用:
- Eclipse版本:Oxygen Release Candidate 3 (4.7.0 RC3)
- Gradle版本:Gradle 3.5.1