我目前正在使用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."
错误。在Gradle脚本的其他地方sourceCompatibility
和targetCompatibility
设置为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')
}
非常感谢任何帮助。
答案 0 :(得分:0)
您的方向正确:格式化和清理配置保留在org.eclipse.jdt.core.prefs
目录中的org.eclipse.jdt.ui.prefs
和.settings
文件中。但是我不敢一行一行地弄乱这些文件的内容,因为它们遵循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"/>