2013-09-02 23 views
5

Tôi đang đấu tranh một chút để tìm ra cách tôi có thể sử dụng plug maven antlr4 để chạy lớp TestRig?Antlr4 "Test Rig" và maven

Tôi đã đọc mặc dù đầu ra của mvn antlr4:help -Ddetail=true, là tài liệu duy nhất tôi có thể tìm thấy, nhưng điều này không đề cập đến cách sử dụng TestRig. Vì vậy, cách khuyến khích sử dụng giàn khoan thử nghiệm cùng với maven là gì? bằng cách sử dụng phương pháp bí danh grun không có vẻ rất thanh lịch ở đây.

CẬP NHẬT - Lý

Xin chào :)

phải, đừng hiểu sai ý tôi nhưng tôi thực sự không hiểu tại sao bạn sẽ không muốn chức năng này trong các plugin maven? Và tôi không hiểu tại sao mục đích linh hồn của nó phải là biên dịch ngữ pháp?

Hiện tại, nếu tôi duy trì bản dựng với Maven và tôi sử dụng antlr4-maven-plugin, nó sẽ cài đặt cả plugin và antlr 4.1 trong kho lưu trữ maven của tôi. Với điều này đã có, tại sao tôi sẽ bắt đầu thêm những thứ để classpath của tôi và tạo bí danh khi maven có thể chăm sóc đó? Ý tôi là, đây là những gì maven thực sự. Nếu tôi có một mục tiêu antlr4:TestRig, thì tất cả những gì tôi sẽ làm là sử dụng nó. Không cần phải tự bảo trì đường dẫn lớp hoặc tạo bí danh bash. Nó sẽ hoạt động.

Và xa hơn nữa thanh lịch là các phần tử mã hóa cứng từ kho lưu trữ maven cục bộ của tôi trong đường dẫn lớp của tôi và duy trì bí danh bash. Hoặc cách khác, duy trì hai cài đặt cho mỗi. phiên bản của antlr tôi muốn sử dụng (một trong những duy trì bởi tôi, chỉ đơn giản là sử dụng TestRig, và một duy trì bởi maven cho tất cả mọi thứ khác).

Thêm vào đó, nếu tôi muốn sử dụng một phiên bản khác của ANTLR, sau đó tôi sẽ không cần phải cập nhật classpath và bí danh của tôi, maven chỉ đơn giản là sẽ quản lý tất cả điều này cho tôi :)

Trả lời

1

Tại sao các plugin Maven chạy lớp học TestRig? Công việc của plugin Maven đang chuyển đổi các tệp ngữ pháp .g4 thành .java tệp nguồn ở vị trí gói thích hợp và đảm bảo các tệp được tạo đó được biên dịch. TestRig không được sử dụng cho bất kỳ phần nào trong đó.

Chỉnh sửa: Tôi đã sử dụng ANTLR trong nhiều năm, trong nhiều ứng dụng. Trong thời gian đó tôi chưa bao giờ cập nhật classpath hệ thống của tôi, cũng như không hoạt động ANTLR/gunit/TestRig từ dòng lệnh hoặc tạo bí danh cho nó. Làm như vậy không hữu ích cho việc thử nghiệm tự động và chắc chắn sẽ dẫn người dùng vào các vấn đề bạn đã mô tả. Điều đó nói rằng, những suy nghĩ rằng TestRig cần sự hỗ trợ đặc biệt trong các plugin Maven cũng không bao giờ vượt qua tâm trí của tôi, bởi vì các giải pháp tốt hơn đã tồn tại.

Một số lựa chọn thay thế

  1. Bạn có thể sử dụng plugin chắc chắn hơn, và viết một bài kiểm tra JUnit mà thực hiện các hoạt động về ngữ pháp của bạn trực tiếp (tạo ra một lexer/phân tích cú pháp, phân tích một số đầu vào, và thậm chí gọi inspect() trên kết quả cây phân tích cú pháp.
  2. Bạn có thể sử dụng plugin chắc chắn hơn, và viết một bài kiểm tra JUnit mà các cuộc gọi một cách rõ ràng TestRig.main(String[]) với những lập luận chính xác.
  3. Bạn có thể thay đổi ANTLR 4 Maven plugin để thêm một mục tiêu mới cho chạy TestRig, và phụ mit một yêu cầu kéo cho dự án để có nó trong một bản phát hành trong tương lai (bạn sẽ cần phải tạo một trường hợp rất hấp dẫn vì đã có 2 lựa chọn thay thế phù hợp hơn cho thử nghiệm thành công lâu dài của một dự án sử dụng ANTLR 4).
+0

Tôi đã cập nhật câu hỏi của mình với một số lý do :) – JustDanyul

+0

@JustDanyul Cảm ơn bạn, giờ đây bạn đã rõ ràng hơn. Tôi đã cập nhật câu trả lời của mình. –

+0

cảm ơn bạn đã liên hệ lại với tôi. Tôi đã không nghĩ về lựa chọn # 2, mà sẽ chơi khá độc đáo cùng với các bài kiểm tra đơn vị đã tồn tại. Chúc mừng. – JustDanyul

2

Tôi có câu hỏi tương tự, trong đó tôi muốn sử dụng tùy chọn TestRig-gui để gỡ lỗi ngữ pháp của mình. Tôi đã không tìm thấy một cách để chạy GUI thông qua antlr4-maven-plugin, nhưng tôi đã quản lý để xây dựng một CLASSPATH thỏa đáng. Điều quan trọng là bao gồm target/classes.

# Assuming your project is in $PROJECT .. 
CLASSPATH=".:/usr/local/lib/antlr-4.1-complete.jar:$PROJECT/target/classes" 
alias grun='java org.antlr.v4.runtime.misc.TestRig' 
mvn -q compile 
grun MyGrammer startingRule -gui < test_input 

Nên tạo giao diện GUI đáng yêu của cây cú pháp.

Đây có thể không phải là câu trả lời bạn đang tìm kiếm, nhưng tôi hy vọng nó sẽ giúp người khác. (. Ví dụ như tôi, ngày mai, khi tôi quên)

2

Đây là cách tôi gọi TestRig với Maven:

mvn exec:java -Dexec.mainClass="org.antlr.v4.runtime.misc.TestRig" 
-Dexec.args="<DOT_NOTATION_GRAMMAR_CLASSPATH> <START_RULE> 
-gui <INPUT_FILE>" 

Vì vậy, nếu bạn đã có MyGrammar.g4 trong src/main/antlr4/com/kiểm tra/parser với quy tắc bắt đầu của startRule:

mvn exec:java -Dexec.mainClass="org.antlr.v4.runtime.misc.TestRig" 
-Dexec.args="com.test.parser.MyGrammar startRule 
-gui <INPUT_FILE>" 
Các vấn đề liên quan