독립형 자바 코드 포맷터 / 미용 / 예쁜 프린터? [닫은]


84

Java 용으로 사용할 수있는 고품질 독립형 소스 코드 포맷터에 대해 알아보고 싶습니다 .

포맷터는 독립형이어야합니다. 즉, 특정 개발 환경에서 분리 된 "배치"모드 를 지원해야 합니다 . 이상적으로는 특정 운영 체제 와도 독립적 이어야합니다 . 따라서 IDE du jour 용 내장 포맷터는 여기서 거의 관심이 없습니다 (IDE가 명령 줄에서 배치 모드 포맷터 호출을 지원하지 않는 한). Windows에서만 실행되는 폐쇄 소스 C / C ++로 작성된 포맷터는 이상적이지는 않지만 다소 흥미 롭습니다.

명확하게 말하면 "포맷터"(또는 "미용사")는 "스타일 검사기"와는 다릅니다. 포맷터는 소스 코드를 입력으로 받아들이고 스타일 지정 규칙을 적용하며 원래 소스 코드와 의미 상 동일한 스타일이 지정된 소스 코드를 생성합니다. 구문 수정은 공백을 변경하거나 import명령문을 구성하는 것과 같은 코드 레이아웃 수정과 같은 것으로 제한됩니다 . 다른 리팩토링은 거의 수행되지 않습니다. 스타일 검사기는 규칙을 스타일링 적용되지만, 단순히 보고 규칙 위반을 수정 된 소스 코드를 생성하지 않고 출력한다. 따라서 그림은 다음과 같습니다.

포맷터 (스타일링 규칙을 준수하는 수정 된 소스 코드 생성)

소스 코드 읽기 → 스타일 규칙 적용 → 스타일 소스 코드 쓰기

스타일 검사기 (수정 된 소스 코드를 생성하지 않음)

소스 코드 읽기 → 스타일링 규칙 적용 → 규칙 위반 쓰기

추가 설명

솔루션은 고도로 구성 가능해야합니다. 단순히 프리셋 목록에서 선택하는 것이 아니라 나만의 스타일을 지정할 수 있기를 원합니다.

또한 많은 것을 예쁘게 인쇄 할 수 있는 Java로 작성된 범용 예쁜 프린터를 찾고 있지 않습니다 . Java 코드를 스타일링하고 싶습니다.

또한 여러 언어를위한 그랜드 통합 포맷터반드시 관심이있는 것은 아닙니다 . 솔루션이 Java 이외의 언어를 지원하는 것이 좋을 수도 있지만 필수 사항은 아닙니다.

또한 코드 강조 표시 만 수행하는 도구바로 사용할 있습니다.

웹 서비스 에도 관심이 없습니다. 로컬에서 실행할 수있는 도구를 원합니다.

마지막으로, 솔루션은 오픈 소스, 퍼블릭 도메인, 셰어웨어, 무료 소프트웨어, 상업용 또는 다른 것으로 제한 될 필요가 없습니다. 모든 형태의 라이센스가 허용 됩니다.


1
코드 서식 만 수행하는 독립형 Helios (Eclipse 3.6) 인 것을 채찍질했습니다. 13MB 미만, Java 전용입니다. openmrs-mailing-list-archives.1560443.n2.nabble.com/…
Миша Кошелев

답변:


25

JIndent (Commercial)는 원하는 작업을 수행합니다.

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
Greg Mattes

오픈 소스 프로젝트가 죽은 것처럼 보이며 Triemax에서 제작 한 상용 버전을 사용하기로 결정했습니다. Jalopy를 사용한 지 오래되었습니다. Ant와 함께 사용했던 것 같습니다. 대신 Jacobe를 살펴보십시오.
Jon

Jacobe는 Java 7에 대해 업데이트되지 않으며 TIOBE는 업데이트되지 않을 것이라고 말합니다.
Chris Jones

1
도 있습니다 구글 - 자바 형식을 .
MRTS

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 ++ 형식화에 맞춰져 있으며 일괄 처리 (셸 스크립트 또는 유사)를 통해 구동 될 수 있습니다.


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 파일을 사용하는 쉘 스크립트가 있습니다. 샘플 출력 :

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

저는 Dr. Java 를 사용 하여 코딩하고 빠른 ctrl + A + 탭을 사용하여 구문 강조 표시로 모든 형식을 멋지게 지정했습니다. 나는 그것을 Mac과 Windows에서 사용했지만 Linux를 지원하는지 모르겠습니다. 그리고 그것은 오픈 소스이고 독립형이며 무료입니다.


코드의 일부가 선택되었을 때 탭을 누르면 선택 형식이 지정됩니다. DrJava는 또한 멋진 대화 형 (통역사) 탭입니다.
dansalmo 2013

0

또한 JRefactory ( http://jrefactory.sourceforge.net/ )에 내장 된 PrettyPrinter를 많이 사용했습니다 . JEdit 용 플러그인을 통해 발견했습니다. 내가 본 더 나은 javadoc 범위를 가지고 있기 때문에 감사했습니다.

불행히도 그것은 죽은 것처럼 보이며 (2004 년 이후로 진화하지 않음) 실제로 Java5를 지원하지 않습니다.

그건 그렇고 나는 Triemax가 죽은 오픈 소스 Jalopy를 기반으로 한 상용 스위트임을 확인합니다.



0

Jalopy는 List stuff <MyClass> ...와 같은 문 및 @로 시작하는 lint 주석을 처리하지 않습니다.

모든 <MyClass>를 LTLTLTMyClassGTGTGT로 변경 한 다음 @를 // @ // @ // @로 변경하여 강제로 포맷 할 수있었습니다 (나는 LT, GT 또는 // @를 반복하여 그런 다음 Jalopy를 사용할 수 있었고 모든 것을 원래 상태로 되돌려 야했습니다.

또한 <또는>를 변경하기 전에 <= 또는> = 등과 같은 비교를 변경하지 않는지 확인해야합니다.

따라서 많은 수동 단계를 포함하기 때문에 이것을 가난한 사람 솔루션이라고 부를 수 있습니다. Jalopy를 더 자주 수행한다면 sed를 사용하여 자동으로 변경하는 스크립트를 작성할 것입니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.