将模块导出添加到 Eclipse .classpath 文件
Adding a module export to the Eclipse .classpath file
我有一个较旧的项目需要在 Eclipse 的 .classpath
文件中导出模块,以便它可以从该模块解析一些 类。如果我通过 Eclipse 的构建路径编辑器生成类路径条目,它看起来像这样:
<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-11/">
<attributes>
<attribute name="module" value="true"/>
<attribute name="add-exports" value="java.desktop/com.sun.java.swing.plaf.motif=ALL-UNNAMED"/>
</attributes>
</classpathentry>
当然,我希望 Gradle 生成该条目,我终于设法做到了:
eclipse.classpath.file {
whenMerged { // remove any JRE containers
entries.findAll{ it.path ==~ '.*JRE_CONTAINER.*' }.each { entries.remove(it) }
}
withXml { // add one with the required export
def node = it.asNode()
def cpe = new Node(node, 'classpathentry', [kind: 'con', path: 'org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-11/'])
def attrs = new Node(cpe, 'attributes')
new Node(attrs, 'attribute', [name: 'module', value: 'true'])
new Node(attrs, 'attribute', [name: 'add-exports', value: 'java.desktop/com.sun.java.swing.plaf.motif=ALL-UNNAMED'])
}
}
但这看起来很粗糙而且过于冗长。有没有更简单的方法来做这样的事情?
更新: 此外,这仅在 运行 gradle eclipse
时有效,但在使用 Buildship 执行“刷新 Gradle 项目”时无效- 作为 that doesn't consider withXml
。所以我需要在 whenMerged
中创建一个容器并向其添加属性,但我无法做到。
我找到了解决方案,可以通过 entryAttributes
field of the AbstractClassEntry class.
访问属性节点
这样我就可以...
eclipse.classpath.file {
whenMerged {
entries.find{ it.path ==~ '.*JRE_CONTAINER.*' }.each {
it.entryAttributes['module'] = true
it.entryAttributes['add-exports'] = 'java.desktop/com.sun.java.swing.plaf.motif=ALL-UNNAMED'
}
}
}
...它也会被Buildship应用。
我有一个较旧的项目需要在 Eclipse 的 .classpath
文件中导出模块,以便它可以从该模块解析一些 类。如果我通过 Eclipse 的构建路径编辑器生成类路径条目,它看起来像这样:
<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-11/">
<attributes>
<attribute name="module" value="true"/>
<attribute name="add-exports" value="java.desktop/com.sun.java.swing.plaf.motif=ALL-UNNAMED"/>
</attributes>
</classpathentry>
当然,我希望 Gradle 生成该条目,我终于设法做到了:
eclipse.classpath.file {
whenMerged { // remove any JRE containers
entries.findAll{ it.path ==~ '.*JRE_CONTAINER.*' }.each { entries.remove(it) }
}
withXml { // add one with the required export
def node = it.asNode()
def cpe = new Node(node, 'classpathentry', [kind: 'con', path: 'org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-11/'])
def attrs = new Node(cpe, 'attributes')
new Node(attrs, 'attribute', [name: 'module', value: 'true'])
new Node(attrs, 'attribute', [name: 'add-exports', value: 'java.desktop/com.sun.java.swing.plaf.motif=ALL-UNNAMED'])
}
}
但这看起来很粗糙而且过于冗长。有没有更简单的方法来做这样的事情?
更新: 此外,这仅在 运行 gradle eclipse
时有效,但在使用 Buildship 执行“刷新 Gradle 项目”时无效- 作为 that doesn't consider withXml
。所以我需要在 whenMerged
中创建一个容器并向其添加属性,但我无法做到。
我找到了解决方案,可以通过 entryAttributes
field of the AbstractClassEntry class.
这样我就可以...
eclipse.classpath.file {
whenMerged {
entries.find{ it.path ==~ '.*JRE_CONTAINER.*' }.each {
it.entryAttributes['module'] = true
it.entryAttributes['add-exports'] = 'java.desktop/com.sun.java.swing.plaf.motif=ALL-UNNAMED'
}
}
}
...它也会被Buildship应用。