2015-11-27 17 views
5

Tôi đang sử dụng aa dự án maven cơ bản mà chỉ có những điều sau đây được định nghĩa trong pom.xml:Maven: Tại sao tôi có thể chạy mvn checkstyle: checkstyle không có cấu hình pom.xml?

  • phụ thuộc JavaEE-api
  • phụ thuộc junit
  • Plugin maven-biên dịch-plugin
  • Plugin maven-chiến-plugin
  • Plugin wildfly-maven-plugin

Tại sao tôi có thể chạy mvn checkstyle:checkstyle trong cửa sổ lệnh? Tôi có nên xác định plugin kiểu séc là pom.xml không? Tôi đang thiếu gì?

Chỉnh sửa: Plugin eclipse "Eclipse Checkstyle Plug-In" được cài đặt. Đó có phải là lý do? Nếu có, làm thế nào để maven giao tiếp với nó?

Trả lời

12

Như bạn đã thấy, có thể thực hiện các plugin trực tiếp từ dòng lệnh mà không cần cấu hình plugin trong tệp POM của dự án của bạn.

Để biết bạn muốn thực thi plugin nào sử dụng độ phân giải tiền tố plugin.

Sử dụng dòng lệnh của bạn, mvn checkstyle:checkstyle, như là một ví dụ này là khoảng những gì maven thực hiện:

  • lấy tiền tố, các bit trước dấu hai chấm, từ việc thực hiện. Trong trường hợp của bạn checkstyle.
  • giải quyết vấn đề này với tên có thể có (artifactId) của plugin. Đối với điều này nó sử dụng hai định dạng có thể:
    • maven-${prefix}-plugin (cho các plugins chính thức Maven)
    • ${prefix}-maven-plugin (đối với plug-in từ các nguồn khác)
  • vì vậy bây giờ nó có maven-checkstyle-plugin như artifactId của các plugin
  • tìm kiếm một plugin với artifactId này và một trong các nhóm đã được định cấu hình (theo mặc định tìm kiếm maven sử dụng nhómId org.apache.maven.plugins)
  • nó tìm thấy maven-checkstyle-plugin
  • thực hiện mục tiêu (bit sau dấu hai chấm trong lệnh), do đó, checkstyle goal trong trường hợp này.

Tất cả điều này được giải thích chi tiết hơn và tốt hơn tôi có thể ở trang plugin prefix mapping của tài liệu chính thức của maven.

+0

Cảm ơn bạn rất nhiều - bây giờ tôi đã hiểu! Có một lợi thế để xác định nó trong pom.xml hơn bằng cách sử dụng nó theo cách tôi đã làm? – NthDegree

+1

Rất vui được giúp đỡ. Ưu điểm lớn nhất là nếu bạn định nghĩa nó trong POM nó sẽ chạy vào thời điểm thích hợp (phần của vòng đời nó được ràng buộc) trong mỗi lần xây dựng mô-đun của bạn. Nếu bạn không cấu hình nó trong pom thì bạn phải thực thi nó theo cách thủ công mọi lúc. – DB5

0

Lý do là một plugin có thể không cần phải được cấu hình rõ ràng trong pom cũng như không bị ràng buộc vào một giai đoạn được chạy.Và như vậy, nó có thể luôn luôn được điều hành bởi gọi trực tiếp (ghi rõ mục tiêu thay vào đó là giai đoạn khi gọi đến Maven):

mvn [options] [<goal(s)>] [<phase(s)>] 

Nhìn vào tài liệu lifecycle:

Một mục tiêu Plugin đại diện cho một công việc cụ thể (tốt hơn giai đoạn xây dựng) góp phần vào việc xây dựng và quản lý dự án. Nó có thể bị ràng buộc bởi 0 hoặc nhiều giai đoạn xây dựng. Một mục tiêu không ràng buộc với bất kỳ giai đoạn xây dựng nào có thể được thực hiện bên ngoài vòng đời xây dựng bằng cách gọi trực tiếp.

Nó chắc chắn không có gì liên quan đến các plugin của Eclipse.

Các vấn đề liên quan