将自定义 Eclipse 格式化程序应用于 Gradle 项目
Apply custom Eclipse formatter to Gradle project
我目前正在为一个项目使用 Eclipse Oxygen 和 Gradle 4.4。在 Eclipse 中,可以在工作区或项目上手动设置自定义 Java 格式化程序。这要求团队中的每个人在创建新工作区时都导入格式化程序 XML 文件。为避免队友忘记应用格式化程序并根据约定的样式指南编写代码,我试图在将项目导入 Eclipse 时自动配置 Gradle 项目以使用我们的自定义格式化程序。格式文件位于项目目录中。我还没有找到任何关于如何最好地实现这一目标的可靠信息。我尝试了以下似乎在表面上有效的方法,但似乎会导致 "Faceted Project Problem (Java Version Mismatch: Java compiler level does not match the version of the installed Java project facet."
错误。 sourceCompatibility
和 targetCompatibility
在 Gradle 脚本的其他地方设置为 1.8
,但编译器合规性级别在项目中设置为 9。如果我不尝试覆盖格式化程序,就不会发生这种情况。当我尝试在“属性”对话框中对项目应用任何更改时,我也会收到一条错误消息:"Error: Exception occurred while saving project preferences: /my-project/.settings/org.eclipse.jdt.ui.prefs."
这是我到目前为止尝试过的方法:
task eclipseConfig {
group='eclipse'
dependsOn cleanEclipse
dependsOn cleanEclipseWtp
dependsOn tasks['eclipse']
dependsOn eclipseWtp
// .settings directory may not exist yet
file('.settings').mkdir()
// Attempt to configure Eclipse to use our custom Java formatter
File f = file('.settings/org.eclipse.jdt.core.prefs')
f.write('eclipse.preferences.version=1\n')
def settings = new XmlSlurper().parse(rootProject.file('formatters/eclipse-java-formatter.xml')).profile.setting
for(def setting : settings) {
f.append("${setting['@id']}=${setting['@value']}\n")
}
f.append('org.eclipse.jdt.core.javaFormatter=org.eclipse.jdt.core.defaultJavaFormatter')
// Another attempt to configure Eclipse to use our custom Java formatter
f = file('.settings/org.eclipse.jdt.ui.prefs')
f.write('eclipse.preferences.version=1\n')
f.append('org.eclipse.jdt.ui.formatterprofiles=')
f.append(rootProject.file('formatters/eclipse-java-formatter.xml').text
.replaceAll(~/\r*\n/, '\\r\\n').replaceAll('=', '\\='))
f.append('\nformatter_profile=_Custom Java Styles')
}
非常感谢任何帮助。
您的方向是正确的:格式化和清理配置保留在 .settings
目录中的 org.eclipse.jdt.core.prefs
和 org.eclipse.jdt.ui.prefs
文件中。但我不敢逐行弄乱这些文件的内容,因为它们遵循 Eclipse 自己的专有格式,我怀疑这种格式没有得到很好的记录,也不能保证及时保持不变。
相反,我会在 Eclipse 中配置一个虚拟项目的格式和清理,然后将每个文件的完整内容(不是逐行)复制到您的gradle 项目,并在将新项目导出到 Eclipse 时使 gradle 脚本完全粘贴其中的每一个。通过复制和粘贴 Eclipse 创建的完整文件,您将避免像您正在试验的那样的语义错误。
无论如何,如果您仍然想逐行处理这些文件,我认为您当前错误的原因是您忘记了其中一些声明:
org.eclipse.jdt.core.prefs
: org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8
org.eclipse.jdt.core.prefs
: org.eclipse.jdt.core.compiler.compliance=1.8
org.eclipse.jdt.core.prefs
: org.eclipse.jdt.core.compiler.source=1.8
org.eclipse.wst.common.project.facet.core.xml
: <installed facet="java" version="1.8"/>
我目前正在为一个项目使用 Eclipse Oxygen 和 Gradle 4.4。在 Eclipse 中,可以在工作区或项目上手动设置自定义 Java 格式化程序。这要求团队中的每个人在创建新工作区时都导入格式化程序 XML 文件。为避免队友忘记应用格式化程序并根据约定的样式指南编写代码,我试图在将项目导入 Eclipse 时自动配置 Gradle 项目以使用我们的自定义格式化程序。格式文件位于项目目录中。我还没有找到任何关于如何最好地实现这一目标的可靠信息。我尝试了以下似乎在表面上有效的方法,但似乎会导致 "Faceted Project Problem (Java Version Mismatch: Java compiler level does not match the version of the installed Java project facet."
错误。 sourceCompatibility
和 targetCompatibility
在 Gradle 脚本的其他地方设置为 1.8
,但编译器合规性级别在项目中设置为 9。如果我不尝试覆盖格式化程序,就不会发生这种情况。当我尝试在“属性”对话框中对项目应用任何更改时,我也会收到一条错误消息:"Error: Exception occurred while saving project preferences: /my-project/.settings/org.eclipse.jdt.ui.prefs."
这是我到目前为止尝试过的方法:
task eclipseConfig {
group='eclipse'
dependsOn cleanEclipse
dependsOn cleanEclipseWtp
dependsOn tasks['eclipse']
dependsOn eclipseWtp
// .settings directory may not exist yet
file('.settings').mkdir()
// Attempt to configure Eclipse to use our custom Java formatter
File f = file('.settings/org.eclipse.jdt.core.prefs')
f.write('eclipse.preferences.version=1\n')
def settings = new XmlSlurper().parse(rootProject.file('formatters/eclipse-java-formatter.xml')).profile.setting
for(def setting : settings) {
f.append("${setting['@id']}=${setting['@value']}\n")
}
f.append('org.eclipse.jdt.core.javaFormatter=org.eclipse.jdt.core.defaultJavaFormatter')
// Another attempt to configure Eclipse to use our custom Java formatter
f = file('.settings/org.eclipse.jdt.ui.prefs')
f.write('eclipse.preferences.version=1\n')
f.append('org.eclipse.jdt.ui.formatterprofiles=')
f.append(rootProject.file('formatters/eclipse-java-formatter.xml').text
.replaceAll(~/\r*\n/, '\\r\\n').replaceAll('=', '\\='))
f.append('\nformatter_profile=_Custom Java Styles')
}
非常感谢任何帮助。
您的方向是正确的:格式化和清理配置保留在 .settings
目录中的 org.eclipse.jdt.core.prefs
和 org.eclipse.jdt.ui.prefs
文件中。但我不敢逐行弄乱这些文件的内容,因为它们遵循 Eclipse 自己的专有格式,我怀疑这种格式没有得到很好的记录,也不能保证及时保持不变。
相反,我会在 Eclipse 中配置一个虚拟项目的格式和清理,然后将每个文件的完整内容(不是逐行)复制到您的gradle 项目,并在将新项目导出到 Eclipse 时使 gradle 脚本完全粘贴其中的每一个。通过复制和粘贴 Eclipse 创建的完整文件,您将避免像您正在试验的那样的语义错误。
无论如何,如果您仍然想逐行处理这些文件,我认为您当前错误的原因是您忘记了其中一些声明:
org.eclipse.jdt.core.prefs
:org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8
org.eclipse.jdt.core.prefs
:org.eclipse.jdt.core.compiler.compliance=1.8
org.eclipse.jdt.core.prefs
:org.eclipse.jdt.core.compiler.source=1.8
org.eclipse.wst.common.project.facet.core.xml
:<installed facet="java" version="1.8"/>