独立的Java代码格式化程序/美化工具/漂亮打印机?[关闭]


84

我对了解Java的高质量独立源代码格式器的可用选择感兴趣

该格式必须是独立的,也就是说,它必须支持“批量”模式从任何特定的开发环境脱钩。理想情况下,它也应独立于任何特定的操作系统。因此,这里对IDE du jour的内置格式化程序没有什么兴趣(除非IDE支持批处理模式格式化程序调用,也许是从命令行启动)。用封闭源C / C ++编写的仅在Windows上运行的格式化程序不是理想的,但有些有趣。

明确地说,“格式器”(或“美化器”)与“样式检查器”不同。格式化程序接受源代码作为输入,应用样式规则,并生成在样式上与原始源代码等效的样式化源代码。语法修改仅限于诸如在更改空格中修改代码布局或组织import语句之类的事情。很少(如果有)执行其他重构。样式检查器还应用样式规则,但是它只是报告违反规则的情况,而不会产生修改后的源代码作为输出。所以图片看起来像这样:

格式化程序(生成符合样式规则的修改后的源代码)

阅读源代码→应用样式规则→编写样式源代码

样式检查器(不产生修改的源代码)

阅读源代码→应用样式规则→违反规则

进一步说明

解决方案必须是高度可配置的。我希望能够指定自己的样式,而不仅仅是从预设列表中进行选择。

另外,我不是在寻找用Java编写的可以漂亮打印许多东西的通用漂亮打印机。我想样式化Java代码。

也不一定会对多种语言的统一格式器感兴趣。我想对于解决方案来说,它支持Java以外的其他语言可能会很好,但这不是必须的。

此外,仅执行代码突出显示的工具可以

我对Web服务也不感兴趣。我想要一个可以在本地运行的工具。

最后,解决方案不必局限于开源,公共领域,共享软件,免费软件,商业软件或其他任何软件。所有形式的许可都是可以接受的


1
我介绍了一个独立的Helios(Eclipse 3.6),它仅执行代码格式化。它小于13 MB,仅Java。openmrs-mailing-list-archives.1560443.n2.nabble.com/...
МишаКошелев

Answers:


25

JIndent(商业)可以满足您的需求:

http://www.jindent.com/

我过去也曾使用Jalopy来做到这一点,它是开源的:

http://jalopy.sourceforge.net/

编辑:我会注意到Jalopy相当老,并且似乎没有对其进行任何更新。我不太确定它是否可以与Java 5/6一起使用。您可能要看一下Jacobe:

http://www.tiobe.com/index.php/content/products/jacobe/Jacobe.html

Roedy Green的网站上还有更完整的格式化程序列表:

http://mindprod.com/jgloss/beautifier.html


开源Jalopy和这个开源Jalopy之间的关系是什么:triemax.com/products/jalopy
Greg Mattes 2009年

开源项目似乎已经死了,他们决定使用Triemax生产的商业版本。自从我使用Jalopy以来已经很长时间了,我相信这是和Ant在一起的。来看看Jacobe。
乔恩

Jacobe尚未针对Java 7进行更新,TIOBE表示永远不会更新。
克里斯·琼斯

1

14

您也可以从命令行运行Eclipse重新格式化。

这是该功能Eclipse文档

首先,您必须创建特定于Java代码格式化程序设置项目的配置文件。

然后保存{projectDirectory}/.settings/org.eclipse.jdt.core.prefs到另一个位置。

现在,您将调用格式化程序。

"c:\path\to\eclipse\eclipse.exe" -vm "C:\path\to\jdk\bin\java.exe" -application org.eclipse.jdt.core.JavaCodeFormatter -config "c:\path\to\org.eclipse.jdt.core.prefs" "C:\path\to\your\src"

[警告]这似乎已在Eclipse 2018中停止工作。请使用Eclipse Oxygen。


7

Jalopy可能很有趣。它将插入Ant,因此独立于您的IDE。

Astyle也可能有用。它是开源的(例如Jalopy),但是用C ++编写。它旨在格式化Java / C / C ++,并且可以进行批处理驱动(通过Shell脚本或类似脚本)


4

更新:根据对错误报告的错误理解,我的新理解是:https ://bugs.eclipse.org/bugs/show_bug.cgi ? id = 325289 OpenMRSFormatter.xml文件实际上必须是首选项文件,而不是XML文件。

您可以在这里找到这样的文件:https : //bugs.eclipse.org/bugs/attachment.cgi?id=178874

或使用以下格式转换任何XML导出的格式化程序文件:cat formatter.xml | grep设置| sed's / @@'> formatter.asprefs

谢谢米莎


这是我使用Eclipse 3.6 jar制作的。它是仅Java的命令行,并且应该跨平台兼容:

http://www.sendspace.com/file/nm4ptt

有一个使用捆绑的OpenMRSCodeFormatter.xml文件的Shell脚本。示例输出:

misha@misha-d630:~/openmrs-code-formatter$ cat ../Test.java
public class Test {



public a() {
System.out.println("! I did not format this right!");
}



}misha@misha-d630:~/openmrs-code-formatter$ ./format.sh ../Test.java
Configuration Name: OpenMRSFormatter.xml
Starting format job ...
Done.
cat ../misha@misha-d630:~/openmrs-code-formatter$ cat ../Test.java
public class Test {

        public a() {
                System.out.println("! I did not format this right!");
        }

}misha@misha-d630:~/openmrs-code-formatter$ 

这是基于此处的帖子:http : //www.peterfriese.de/formatting-your-code-using-the-eclipse-code-formatter/

由于我不知道链接将保持多长时间,因此,我将在下面描述内容。

这基于Eclipse 3.6 Helios发行版。我将它用于Linux x86,但是它应该适用于任何版本,因为据我所知,我没有使用任何平台特定的JAR文件。

tar归档文件的内容为:

misha@misha-d630:~$ tar tvjf openmrs-code-formatter.tar.bz2  | sort 
tar: Record size = 8 blocks
drwxr-xr-x misha/misha       0 2010-09-11 19:32 openmrs-code-formatter/plugins/
drwxr-xr-x misha/misha       0 2010-09-11 19:33 openmrs-code-formatter/configuration/org.eclipse.equinox.simpleconfigurator/
drwxr-xr-x misha/misha       0 2010-09-11 19:38 openmrs-code-formatter/configuration/
-rw-r--r-- misha/misha  101957 2010-09-11 19:03 openmrs-code-formatter/plugins/org.eclipse.equinox.common_3.6.0.v20100503.jar
-rw-r--r-- misha/misha  107210 2010-09-11 19:32 openmrs-code-formatter/plugins/org.eclipse.core.commands_3.6.0.I20100512-1500.jar
-rw-r--r-- misha/misha  111098 2010-09-11 19:06 openmrs-code-formatter/plugins/org.eclipse.equinox.preferences_3.3.0.v20100503.jar
-rw-r--r-- misha/misha 1147220 2010-09-11 18:45 openmrs-code-formatter/plugins/org.eclipse.osgi_3.6.0.v20100517.jar
-rw-r--r-- misha/misha    1812 2010-09-11 19:33 openmrs-code-formatter/configuration/org.eclipse.equinox.simpleconfigurator/bundles.info
-rw-r--r-- misha/misha  182596 2010-09-11 19:05 openmrs-code-formatter/plugins/org.eclipse.equinox.registry_3.5.0.v20100503.jar
-rw-r--r-- misha/misha  248071 2010-09-11 19:29 openmrs-code-formatter/plugins/org.eclipse.text_3.5.0.v20100601-1300.jar
-rw-r--r-- misha/misha     265 2010-09-11 19:21 openmrs-code-formatter/configuration/config.ini
-rw-r--r-- misha/misha   28554 2010-09-11 19:34 openmrs-code-formatter/OpenMRSFormatter.xml
-rw-r--r-- misha/misha   39331 2010-09-11 19:17 openmrs-code-formatter/plugins/org.eclipse.equinox.simpleconfigurator_1.0.200.v20100503.jar
-rw-r--r-- misha/misha 4504121 2010-09-11 19:27 openmrs-code-formatter/plugins/org.eclipse.jdt.core_3.6.0.v_A58.jar
-rw-r--r-- misha/misha   47023 2010-09-11 18:42 openmrs-code-formatter/plugins/org.eclipse.equinox.launcher_1.1.0.v20100507.jar
-rw-r--r-- misha/misha   52710 2010-09-11 19:29 openmrs-code-formatter/plugins/org.eclipse.core.filesystem_1.3.0.v20100526-0737.jar
-rw-r--r-- misha/misha 6451211 2010-09-11 19:32 openmrs-code-formatter/plugins/com.ibm.icu_4.2.1.v20100412.jar
-rw-r--r-- misha/misha   70928 2010-09-11 19:01 openmrs-code-formatter/plugins/org.eclipse.core.runtime_3.6.0.v20100505.jar
-rw-r--r-- misha/misha  769898 2010-09-11 19:29 openmrs-code-formatter/plugins/org.eclipse.core.resources_3.6.0.v20100526-0737.jar
-rw-r--r-- misha/misha   83817 2010-09-11 19:07 openmrs-code-formatter/plugins/org.eclipse.equinox.app_1.3.0.v20100512.jar
-rw-r--r-- misha/misha   86986 2010-09-11 19:31 openmrs-code-formatter/plugins/org.eclipse.core.expressions_3.4.200.v20100505.jar
-rw-r--r-- misha/misha   90837 2010-09-11 19:05 openmrs-code-formatter/plugins/org.eclipse.core.jobs_3.5.0.v20100515.jar
-rw-r--r-- misha/misha   91928 2010-09-11 19:06 openmrs-code-formatter/plugins/org.eclipse.core.contenttype_3.4.100.v20100505-1235.jar
-rwxr-xr-x misha/misha     111 2010-09-11 19:39 openmrs-code-formatter/format.sh

插件目录中的相关jar直接从Eclipse 3.6插件目录中获取。

config.ini的内容是:

misha@misha-d630:~$ more openmrs-code-formatter/configuration/config.ini 
osgi.bundles=reference\:file\:org.eclipse.equinox.simpleconfigurator_1.0.200.v20100503.jar@1\:start
org.eclipse.equinox.simpleconfigurator.configUrl=file\:org.eclipse.equinox.simpleconfigurator/bundles.info
eclipse.application=org.eclipse.jdt.core.JavaCodeFormatter

format.sh是:

misha@misha-d630:~$ more openmrs-code-formatter/format.sh 
#!/bin/bash
java -jar plugins/org.eclipse.equinox.launcher_1.1.0.v20100507.jar -config OpenMRSFormatter.xml $*

和OpenMRSFormatter.xml可以在这里找到:http ://wiki.openmrs.org/download/attachments/3346087/OpenMRSFormatter.xml?version=1&modificationDate=1282168038000

我认为应该足以复制。

您可以在此处找到基于相同概念的有趣项目:http : //code.google.com/p/maven-java-formatter-plugin/

谢谢米莎



1

我曾经使用Java博士进行编码,并使用快速ctrl + A +选项卡将其高亮显示,并通过语法高亮显示。香港专业教育学院在Mac和Windows上使用它,不知道他们是否支持Linux。而且它是开源的,独立的和免费的。


选择代码的任何部分时,按Tab键将格式化选择。DrJava也是一个不错的交互式(类似于解释器)选项卡。
dansalmo

0

我还使用了很多嵌入在JRefactory(http://jrefactory.sourceforge.net/)中的PrettyPrinter 。我通过其JEdit插件发现了它。我对此表示赞赏,因为它具有我见过的更好的javadoc覆盖范围。

不幸的是,它似乎已经死了(自2004年以来没有发展),实际上它不支持Java5。

顺便说一下,我确认Triemax是基于死的开源Jalopy的商业套件。



0

Jalopy不会处理诸如List stuff <MyClass> ...之类的语句以及以@开头的棉绒注释

我已经能够通过将所有<MyClass>更改为LTLTLTMyClassGTGTGT,然后将@更改为// @ // @ // @来强制其格式化(我只是重复LT,GT或// @以确保它们不然后我就可以使用Jalopy,显然我必须将所有内容替换为原来的内容。

同样,在更改<或>之前,必须确保您不会更改<=或> =等之类的比较。

因此,您可以将其称为“穷人解决方案”,因为它涉及许多手动步骤。如果要更频繁地执行Jalopy,我可能会使用sed编写一个脚本,该脚本将为我自动进行那些更改。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.