2009-06-15 12 views
73

Tôi quan tâm đến việc tìm hiểu về các lựa chọn có sẵn của các trình định dạng mã nguồn độc lập, chất lượng cao dành cho Java.Trình định dạng mã Java độc lập/làm đẹp/máy in đẹp?

Trình định dạng phải độc lập, tức là phải hỗ trợ chế độ "hàng loạt" "decoupled from any particular development environment. Lý tưởng nhất, nó phải là độc lập với bất kỳ hệ điều hành cụ thể nào. Vì vậy, một trình định dạng dựng sẵn cho IDE du jour ít được quan tâm ở đây (trừ khi IDE đó hỗ trợ lệnh gọi trình định dạng chế độ lô, có lẽ từ dòng lệnh). Một trình định dạng được viết trong C/C++ nguồn đóng mà chỉ chạy trên, nói, Windows không phải là lý tưởng, nhưng có phần thú vị.

Để rõ ràng, "trình định dạng" (hoặc "làm đẹp") không giống với "trình kiểm tra kiểu". Trình định dạng chấp nhận mã nguồn làm đầu vào, áp dụng các quy tắc tạo kiểu và tạo mã nguồn theo kiểu tương đương ngữ nghĩa với mã nguồn ban đầu. Sửa đổi cú pháp được giới hạn ở những thứ như sửa đổi bố cục mã như trong việc thay đổi khoảng trắng hoặc tổ chức các câu lệnh import. Rất ít, nếu có, việc tái cấu trúc khác được thực hiện. Trình kiểm tra kiểu cũng áp dụng quy tắc tạo kiểu, nhưng nó chỉ đơn giản là báo cáo vi phạm quy tắc mà không tạo mã nguồn được sửa đổi làm đầu ra. Vì vậy, hình ảnh trông như thế này:

Formatter (sản xuất mã nguồn được sửa đổi đó phù hợp với quy tắc phong)

đọc Source Code → Áp dụng quy Styling → Viết theo kiểu Mã Nguồn

Phong cách Checker (không tạo mã nguồn được sửa đổi)

Đọc mã nguồn → Áp dụng quy tắc tạo kiểu → Viết vi phạm quy tắc

giải thích thêm

Solutions phải cấu hình cao. Tôi muốn có thể xác định phong cách của riêng tôi, không chỉ đơn giản là chọn từ một danh sách định sẵn.

Ngoài ra, tôi là không tìm kiếm general purpose pretty-printer written in Java có thể in khá nhiều thứ. Tôi muốn tạo mã Java.

Tôi cũng là không nhất thiết phải quan tâm đến một grand-unified formatter cho nhiều ngôn ngữ. Tôi cho rằng nó có thể là tốt đẹp cho một giải pháp để có hỗ trợ cho các ngôn ngữ khác ngoài Java, nhưng đó không phải là một yêu cầu.

Hơn nữa, tools that only perform code highlightingrightout.

Tôi cũng là không quan tâm đến dịch vụ web. Tôi muốn có một công cụ mà tôi có thể chạy cục bộ.

Cuối cùng, các giải pháp không cần giới hạn đối với nguồn mở, miền công cộng, phần mềm chia sẻ, phần mềm miễn phí, thương mại hoặc bất kỳ thứ gì khác.Tất cả các hình thức cấp phép đều được chấp nhận.

+0

wiki cộng đồng? – skaffman

+1

Tôi đã đánh dấu một thứ gì đó là một Helios độc lập (Eclipse 3.6) chỉ có định dạng mã. Nó là <13 MB, chỉ Java. http://openmrs-mailing-list-archives.1560443.n2.nabble.com/cross-platform-cross-IDE-code-formatting-I-believe-it-is-doable-and-halfway-there-td5522493. html # a5522493 –

Trả lời

25

JIndent (thương mại) làm những gì bạn muốn:

http://www.jindent.com/

Tôi cũng đã sử dụng Jalopy trong quá khứ để làm điều này, nó là mã nguồn mở:

http://jalopy.sourceforge.net/

EDIT: Tôi sẽ lưu ý rằng Jalopy là khá cũ và dường như không có bất kỳ cập nhật gần đây cho nó. Tôi không hoàn toàn chắc chắn nếu nó sẽ làm việc với Java 5/6. Bạn có thể muốn nhìn vào Jacobe thay vì:

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

Ngoài ra còn có một danh sách đầy đủ hơn về trình định dạng ở đây trên trang web Roedy Green:

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

+0

Mối quan hệ giữa Jalopy nguồn mở và cái gì: http://www.triemax.com/products/jalopy/ –

+0

Dường như dự án nguồn mở đã chết và họ đã quyết định đi với một thương mại phiên bản - được sản xuất bởi Triemax. Đã lâu rồi kể từ khi tôi sử dụng Jalopy, tôi tin rằng đó là với Ant. Thay vào đó hãy xem Jacobe. – Jon

+0

Jacobe không được cập nhật cho Java 7, và TIOBE nói rằng nó sẽ không bao giờ được. –

6

Jalopy có thể quan tâm. Nó sẽ cắm vào Ant và do đó độc lập với IDE của bạn.

Astyle cũng có thể hữu ích. Đó là mã nguồn mở (như Jalopy) nhưng được viết bằng C++. Nó hướng tới định dạng Java/C/C++ và có thể được định hướng theo lô (thông qua các kịch bản shell hoặc tương tự)

+1

bỏ phiếu cho Astyle –

+0

Được bỏ phiếu tại sao? –

1

Tôi đã sử dụng Dr. Java để mã và với một ctrl nhanh + tab A + định dạng nó hoàn toàn độc đáo với cú pháp làm nổi bật. Ive sử dụng nó trên một máy Mac và Windows, không biết nếu họ hỗ trợ Linux. Và đó là nguồn mở, độc lập và miễn phí.

+0

Nhấn tab khi bất kỳ phần nào của mã được chọn sẽ định dạng lựa chọn. DrJava cũng là một tab tương tác tốt (giống như thông dịch viên). – dansalmo

0

Tôi cũng đã sử dụng rất nhiều PrettyPrinter được nhúng bên trong JRefactory (http://jrefactory.sourceforge.net/). Tôi phát hiện ra nó thông qua plugin của nó cho JEdit. Tôi đánh giá cao nó vì nó có độ bao phủ javadoc tốt hơn mà tôi từng thấy.

Thật không may nó có vẻ đã chết (không có sự tiến hóa từ năm 2004) và thực sự nó không hỗ trợ Java5.

Bằng cách này tôi xác nhận rằng Triemax là một bộ thương mại dựa trên Jalopy nguồn mở đã chết.

14

Bạn cũng có thể chạy trình định dạng lại Eclipse từ dòng lệnh. Kiểm tra this blog entry

4

UPDATE: mỗi sự hiểu biết mới của tôi dựa trên một báo cáo lỗi sai Tôi nộp: https://bugs.eclipse.org/bugs/show_bug.cgi?id=325289 File OpenMRSFormatter.xml thực sự có phải là một tập tin sở thích và không phải là một tập tin XML.

Bạn có thể tìm thấy một tập tin ví dụ ở đây: https://bugs.eclipse.org/bugs/attachment.cgi?id=178874

hoặc chuyển đổi bất kỳ tập tin XML xuất khẩu định dạng với: mèo formatter.xml | cài đặt grep | Định dạng sed 's/@@'>.asprefs

Cảm ơn bạn Misha


Dưới đây là một cái gì đó mà tôi đã sử dụng Eclipse 3.6 lọ. Đó là Java-chỉ, dòng lệnh, và nên là nền tảng tương thích:

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

Có một kịch bản shell mà sử dụng một tập tin OpenMRSCodeFormatter.xml kèm. Sản lượng mẫu:

[email protected]:~/openmrs-code-formatter$ cat ../Test.java 
public class Test { 



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



}[email protected]:~/openmrs-code-formatter$ ./format.sh ../Test.java 
Configuration Name: OpenMRSFormatter.xml 
Starting format job ... 
Done. 
cat ../[email protected]:~/openmrs-code-formatter$ cat ../Test.java 
public class Test { 

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

}[email protected]:~/openmrs-code-formatter$ 

này được dựa trên các bài ở đây: http://www.peterfriese.de/formatting-your-code-using-the-eclipse-code-formatter/

Như tôi đã không biết bao lâu liên kết sẽ ở lại, tôi sẽ mô tả các nội dung dưới đây.

Điều này dựa trên phân phối Eclipse 3.6 Helios. Tôi đã sử dụng một cho Linux x86, nhưng nó sẽ làm việc cho bất kỳ phiên bản nào, vì tôi đã không sử dụng bất kỳ tệp JAR cụ thể nào (cho kiến ​​thức của tôi) nền tảng của mình.

Nội dung của các kho lưu trữ tar là:

[email protected]:~$ 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 

lọ có liên quan trong plugins được lấy trực tiếp từ Eclipse thư mục 3.6 plugins.

Nội dung của config.ini là:

[email protected]:~$ more openmrs-code-formatter/configuration/config.ini 
osgi.bundles=reference\:file\:[email protected]\:start 
org.eclipse.equinox.simpleconfigurator.configUrl=file\:org.eclipse.equinox.simpleconfigurator/bundles.info 
eclipse.application=org.eclipse.jdt.core.JavaCodeFormatter 

format.sh là:

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

và OpenMRSFormatter.xml có sẵn ở đây: http://wiki.openmrs.org/download/attachments/3346087/OpenMRSFormatter.xml?version=1&modificationDate=1282168038000

Tôi tin rằng nên đủ để tái sản xuất.

Một dự án thú vị dựa trên khái niệm tương tự được tìm thấy ở đây: http://code.google.com/p/maven-java-formatter-plugin/

Cảm ơn bạn Misha

0

Xem Java Formatter của chúng tôi cho một công cụ để xử lý tất cả các phương ngữ Java, bao gồm cả phiên bản 7.

0

Jalopy không xử lý các câu lệnh như Danh sách các công cụ <MyClass> ... và nhận xét lint bắt đầu bằng @

Tôi đã có thể ép buộc định dạng bằng cách thay đổi tất cả các <MyClass> thành LTLTLTMyClassGTGTGT và sau đó @ thành // @ // @ // @ (tôi chỉ lặp lại LT, GT hoặc // @ để đảm bảo chúng không đã không tồn tại. Sau đó, tôi đã có thể Jalopy, và rõ ràng tôi phải thay thế tất cả mọi thứ trở lại với những gì nó được.

Ngoài ra, trước khi thay đổi < hoặc > bạn phải chắc chắn rằng bạn sẽ không thay đổi so sánh như < = hoặc > =, vv

Vì vậy, bạn có thể gọi đây là giải pháp người đàn ông nghèo vì nó liên quan đến nhiều các bước thủ công.Nếu tôi thường xuyên làm Jalopy, tôi có lẽ sẽ viết một kịch bản bằng cách sử dụng sed để tự động thực hiện những thay đổi đó cho tôi.