以编程方式将 Eclipse 格式化程序配置文件 XML 导出到 .prefs

Posted

技术标签:

【中文标题】以编程方式将 Eclipse 格式化程序配置文件 XML 导出到 .prefs【英文标题】:Programmatically export eclipse formatter profile XML into .prefs 【发布时间】:2018-11-08 14:02:20 【问题描述】:

我的团队使用 Eclipse 配置文件 XML 文件中定义的代码格式约定,如下所示:

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<profiles version="12">
<profile kind="CodeFormatterProfile" name="This Team's Formatting Convention"  version="12">
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_ellipsis" value="insert"/>
...

我使用 eclipse 作为命令行格式化程序,使用如下命令:

eclipse -nosplash -application org.eclipse.jdt.core.JavaCodeFormatter \
    -config $JAVA_FORMATTER_CONFIG_FILE $*

这仅适用于 $JAVA_FORMATTER_CONFIG_FILE 是 Eclipse 首选项文件,其文件名类似于 org.eclipse.jdt.core.prefs 和内容:

eclipse.preferences.version=1
org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8
org.eclipse.jdt.core.compiler.compliance=1.8
org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
org.eclipse.jdt.core.compiler.source=1.8

如何在不从 eclipse UI 手动导入 XML 配置文件的情况下以编程方式获取 .prefs 文件?

【问题讨论】:

使用 XSLT、正则表达式或从 XML 读取 ID/值对并将其保存到属性文件中,可以轻松地将 XML 文件转换为属性文件:&lt;setting id="$id" value="$value"/&gt; => $id=$value。还是我误解了您的问题,这与将格式化程序配置文件 XML 转换为 .settings/org.eclipse.jdt.core.prefs 无关? 我明白了。我不确定 XML 到 .pref 值是否有任何特殊处理或映射。 【参考方案1】:

来自 Eclipse Oxygen 工作台,

导出当前首选项:文件 -> 导出 -> 首选项 选择“Java 代码样式首选项” 选择名称和目的地并保存(似乎必须使用 .epf 扩展名)

该文件将包含(除其他外)自定义格式器配置

/instance/org.eclipse.jdt.ui/formatter_profile=_my-java-formatter
/instance/org.eclipse.jdt.ui/formatter_settings_version=13
/instance/org.eclipse.jdt.ui/org.eclipse.jdt.ui.formatterprofiles=<?xml version\="1.0" encoding\="UTF-8" standalone\="no"?>\n<profiles version\="13">\n<profile kind\="CodeFormatterProfile" name\="my-java-formatter" version\="13">\n...
...

然后你可以运行格式化程序

eclipse -nosplash -application org.eclipse.jdt.core.JavaCodeFormatter -config eclipse-formatter.epf Test.java

输出:

org.eclipse.m2e.logback.configuration: The org.eclipse.m2e.logback.configuration bundle was activated before the state location was initialized.  Will retry after the state location is initialized.
org.eclipse.m2e.logback.configuration: Logback config file: /home/luis/eclipse-workspace/.metadata/.plugins/org.eclipse.m2e.logback.configuration/logback.1.8.3.20180227-2137.xml
SLF4J: Class path contains multiple SLF4J bindings.
SLF4J: Found binding in [bundleresource://496.fwk1538849250:1/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: Found binding in [bundleresource://496.fwk1538849250:2/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: See http://www.slf4j.org/codes.html#multiple_bindings for an explanation.
SLF4J: Actual binding is of type [ch.qos.logback.classic.util.ContextSelectorStaticBinder]
org.eclipse.m2e.logback.configuration: Initializing logback
Configuration Name: eclipse-formatter.epf
Starting format job ...
Done.

首选项导出完成一次,然后您可以共享eclipse-formatter.epf 文件。 希望对您有所帮助。

【讨论】:

我真的在寻找一种以编程方式执行此操作的方法。但是,假设上游 XML 文件永远不会更改,或者我不必处理多个 XML,那么我猜你是对的,这只能执行一次并且 .prefs 或 .epf 文件可以共享。如果上游 XML 规范发生变化,那么我想我会在 cmets 中使用 howlger 的建议。 是的,您的帖子的标题可能应该更改 :p 。这是和 IBM howto 以编程方式导出/导入。

以上是关于以编程方式将 Eclipse 格式化程序配置文件 XML 导出到 .prefs的主要内容,如果未能解决你的问题,请参考以下文章

以编程方式利用 Eclipse 的合并和差异查看器

Spring Boot 以编程方式设置配置文件

Eclipse RCP - 以编程方式更改 plugin.xml?重新加载?

以编程方式创建持久的 android 视图

以编程方式递归列出eclipse工作区中的所有文件

以编程方式添加配置文件和证书