首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >分级,rt.jar访问限制

分级,rt.jar访问限制
EN

Stack Overflow用户
提问于 2016-04-15 00:30:40
回答 1查看 4.8K关注 0票数 11

我使用的是一个Gradle构建,其中包含了以下内容:

代码语言:javascript
复制
apply plugin: 'java'
apply plugin: 'maven'
apply plugin: 'eclipse'

repositories {
  flatDir { dirs "${System.env.JAVA_HOME}/jre/lib" }
}

dependencies {
  compile name: 'rt' 
}

它构建了,这很好,但是eclipse插件给我在rt.jar类上的困难:

访问限制:由于对所需库/usr/local/app/jre 1.8.0_11/jre/lib/rt.jar的限制,无法访问XMLSerializer类型

我能理解。

现在我知道你会告诉我不要使用那些类。但是你知道这是怎么回事,我正在做一个古老的项目,我现在只需要让它发挥作用。

我的第一个问题是:限制信息在哪里?

很明显:我怎么才能绕开它呢?我想把它作为艺术品上传到我的Nexus回购上,还有什么比这更容易的吗?

EN

回答 1

Stack Overflow用户

发布于 2017-04-06 09:13:42

解释:在gradle中有一个eclipse插件,允许修改从gradle模型生成eclipse的行为。这个插件有一个名为classpath的子集特性,允许修改.classpath生成的eclipse文件。

代码:

代码语言:javascript
复制
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 (“访问规则”部分)

参数解释:

  • '0' =可访问
  • '1' =不可访问
  • '2' =气馁

我的个人用法如下:

代码语言:javascript
复制
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/**'))
            }
        }
    }
}

,输出如下:

代码语言:javascript
复制
<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>

测试和使用:

  • 月食版本:氧气释放候选3 (4.7.0 RC3)
  • 分级版本: Gradle 3.5.1
票数 10
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36636345

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档