我正在使用Gradle构建,其中包括:
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/apps/jdk1.8.0_11/jre/lib/rt.jar的限制,无法访问XMLSerializer类型
我理解。
现在我知道你会告诉我不要使用这些课程。但是你知道是怎么回事,我正在做一个古老的项目,我只需要让它暂时发挥作用。
我的第一个问题是:限制信息位于哪里?
很明显,我该怎么做?我正在考虑把它作为一个工件上传到我的Nexus回购上,还有比这更简单的吗?
说明:gradle中有一个eclipse
插件,允许修改从gradle模型生成eclipse配置的行为。该插件有一个名为classpath
的子集功能,允许修改生成的. classpath
eclipse文件。
代码:
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'
=可访问我个人的用法是这样的:
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中进行编译的某些Java代码遇到了一些麻烦。我不断收到以下警告… 从这行代码… 我已经找到解决方法,但是我担心限制警告。这段代码是针对我的开源项目(CfTracker)的,如果我要破坏某种许可协议,我不想解决此限制。谁能帮我理解这一点? 问题答案: 这不是许可协议的问题。只是Eclipse试图保护您避免使用不是正式JDK API一部分(而是Oracle / Su
问题内容: 这是代码: 这是错误: eclipse says this: 访问限制:类型“应用程序”不是API(对所需库“ /Library/Java/JavaVirtualMachines/jdk1.8.0_11.jdk/Contents/Home/jre/lib/rt.jar”的限制) 问题答案: 这也发生在我身上,这里给出的答案已经不令人满意,所以我做了自己的研究。 背景:Eclipse 访
问题内容: 我试图在不重新创建存根的情况下编译由IBM的WSDL2Java在Java5上创建的Java 1.4代码,并在Eclipse中看到此错误。我的假设是,只要运行时jar可用(它们存在),生成的存根就应该编译。 完整的班级名称是 这到底是怎么回事?这是我要用香肠重构猪的情况吗?我最好重新创建存根吗? 问题答案: 还有另一个解决方案,也可以。 转到项目属性中的“ 构建路径”设置。 删除JRE系
代码如下: eclipse是这样说的: 访问限制:类型“Application”不是API(对所需库“/library/java/javavirtualmachines/jdk1.8.0_11.jdk/contents/home/jre/lib/rt.jar”的限制)
问题内容: 我试图在不重新创建存根的情况下编译由IBM的WSDL2Java在Java5上创建的Java 1.4代码,并在Eclipse中看到此错误。 我假设生成的存根应该只要运行时可用就可以编译。 jars 完整的班级名称是 javax.xml.namespace.QName 这到底是怎么回事?这是我要用香肠重构猪的情况吗?我最好重新创建存根吗? 问题答案: 还有另一个解决方案,也可以。 1, 转
在Class内部,可以有属性和方法,而外部代码可以通过直接调用实例变量的方法来操作数据,这样,就隐藏了内部的复杂逻辑。 但是,从前面Student类的定义来看,外部代码还是可以自由地修改一个实例的name、score属性: >>> bart = Student('Bart Simpson', 98) >>> bart.score 98 >>> bart.score = 59 >>> bart.sc