Lệnh Maven để xác định tệp cài đặt nào Maven đang sử dụng


Câu trả lời:


333

Bắt đầu maven với tùy chọn -X (gỡ lỗi) và kiểm tra phần đầu của đầu ra. Cần có một cái gì đó như thế này:

...
[INFO] Error stacktraces are turned on.
[DEBUG] Reading global settings from c:\....\apache-maven-3.0.3\conf\settings.xml
[DEBUG] Reading user settings from c:\....\.m2\settings.xml
[DEBUG] Using local repository at C:\....\repository
...

(Tên thư mục gốc được xóa bởi tôi)


10
Có lẽ điều này không có trong đầu ra gỡ lỗi cho đến khi maven 3 được phát hành, nhưng bài đăng của bạn khoảng 2,5 năm sau đó cuối cùng là câu trả lời chính xác mà tôi đang tìm kiếm (xin lỗi vì sự chậm trễ 6 tháng khi nhận thấy nó).
harschware

Phiên bản maven tôi đang sử dụng, maven2.x, không hiển thị chi tiết quan trọng này khi cờ -B được sử dụng. ... Thật không may, nếu bạn đang cố gắng gỡ lỗi những gì đang xảy ra với máy chủ Jenkins.
Cognitiaclaeves

168

Nhận xét của bạn cho câu trả lời (chính xác) của cletus ngụ ý rằng có nhiều tệp cài đặt Maven liên quan.

Maven luôn sử dụng một hoặc hai tệp cài đặt. Các cài đặt toàn cục được xác định trong ($ {M2_HOME} /conf/sinstall.xml) luôn được yêu cầu. Tệp cài đặt người dùng (được xác định trong $ {user.home} /. M2 / settings.xml) là tùy chọn. Bất kỳ cài đặt nào được xác định trong cài đặt người dùng đều được ưu tiên so với cài đặt chung tương ứng.

Bạn có thể ghi đè vị trí của cài đặt toàn cầu và người dùng từ dòng lệnh, ví dụ sau sẽ đặt cài đặt chung thành c: \ global \ settings.xml và cài đặt người dùng thành c: \ user \ settings.xml :

mvn install --settings c:\user\settings.xml 
    --global-settings c:\global\settings.xml

Hiện tại không có thuộc tính hoặc phương tiện để thiết lập tệp người dùng và cài đặt chung nào được sử dụng với Maven. Để truy cập các giá trị này, bạn sẽ phải sửa đổi MavenCli và / hoặc DefaultMavenSinstallBuilder để đưa các vị trí tệp vào đối tượng Cài đặt đã giải quyết.


1
sẽ thật tuyệt nếu chúng tôi có thể cung cấp nhiều cài đặt của người dùng, vì vậy chúng tôi có thể sử dụng chúng với các dự án khác nhau chẳng hạn. Tôi biết rằng chúng ta có thể sử dụng một hồ sơ. Nhưng sẽ tốt hơn nhiều nếu có một tệp riêng. Điều đó là không thể, phải không?! Chúc mừng!
bạo chúa

Tôi đã tìm kiếm một giải pháp để ghi đè cài đặt người dùng của mình chỉ một lần mà không phải giả mạo tập tin. Vì vậy, tôi chỉ sử dụng tệp toàn cầu cho các cài đặt người dùng. Tức là - cài đặt c: \ global \ settings.xml theo cách này, tệp người dùng đã bị bỏ qua
msp

@despot, đến dự tiệc muộn nhưng theo cách bạn có thể thông qua nhiều hồ sơ được xác định và một số 'trình kích hoạt' tùy chỉnh: maven.apache.org/sinstall.html#Activation
không thể chia sẻ

Nó luôn yêu cầu pom trong thư mục hiện tại. "Mục tiêu bạn đã chỉ định yêu cầu dự án thực hiện nhưng không có POM trong thư mục này (/). Vui lòng xác minh bạn đã gọi Maven từ thư mục chính xác. -> [Trợ giúp 1]"
Nilesh


40

Đây là tập tin cấu hình cho Maven. Nó có thể được chỉ định ở hai cấp độ:

  1. Cấp độ người dùng. Tệp settings.xml này cung cấp cấu hình cho một người dùng và thường được cung cấp trong $ {user.home} /. M2 / settings.xml.

              NOTE: This location can be overridden with the CLI option:
    
              -s /path/to/user/settings.xml
  2. Cấp độ toàn cầu. Tệp cài đặt này cung cấp cấu hình cho tất cả người dùng Maven trên một máy (giả sử tất cả họ đều sử dụng cùng một cài đặt Maven). Nó thường được cung cấp trong $ {maven.home} /conf/sinstall.xml.

              NOTE: This location can be overridden with the CLI option:
    
              -gs /path/to/global/settings.xml

1
tài sản là M2_HOME, không phải maven.home
Người bán giàu có

Nó không thành vấn đề. Nếu bạn đặt biến môi trường bằng maven.home, thì đó không phải là vấn đề
lần đầu tiên vào

24

Các M2_HOMEbiến môi trường cho một toàn cầu. Xem Cài đặt tham khảo :

Phần settingstử trong settings.xmltệp chứa các phần tử được sử dụng để xác định các giá trị cấu hình thực thi Maven theo nhiều cách khác nhau, như pom.xml, nhưng không nên được gói cho bất kỳ dự án cụ thể nào hoặc phân phối cho đối tượng. Chúng bao gồm các giá trị như vị trí kho lưu trữ cục bộ, máy chủ kho lưu trữ từ xa thay thế và thông tin xác thực. Có hai vị trí nơi tệp cài đặt có thể sống:

  • Cài đặt Maven: $M2_HOME/conf/settings.xml
  • Cài đặt của người dùng: ${user.home}/.m2/settings.xml

Nếu câu trả lời này là ngụ ý rằng việc xác định kho lưu trữ chỉ được thực hiện bằng cách kiểm tra môi trường thì đây là một câu trả lời hợp lệ. Tôi đã hy vọng tìm hiểu về một công tắc dòng lệnh hoặc một cái gì đó cung cấp một danh sách chính xác các đường dẫn đủ điều kiện cho tất cả các tệp settings.xml được sử dụng ... Tôi nghĩ có lẽ không có cơ chế nào như vậy.
harschware

3
Câu trả lời +1, Cletus. Tôi nghĩ rằng đáng để đề cập đến dòng tiếp theo từ liên kết "Tham khảo cài đặt" của bạn:the former settings.xml are also called global settings, the latter settings.xml are referred to as user settings. If both files exists, their contents gets merged, with the user-specific settings.xml being dominant.
Kevin Meredith

Sự cần thiết phải có một cấu hình máy cụ thể để tìm các kho riêng làm tôi đau đớn rất nhiều. Tôi nhận ra đây là hiện trạng trong hệ sinh thái Java nhưng nó dẫn đến các thiết lập xây dựng khủng khiếp không thể thực hiện được.
jpierson

24

Phương thức nhanh và bẩn để xác định xem Maven có đang sử dụng cài đặt mong muốn hay không sẽ làm mất hiệu lực xml của nó và chạy một số lệnh maven an toàn yêu cầu cài đặt.

Nếu nó đọc tệp settings.xml này thì Maven báo lỗi: "Lỗi khi đọc settings.xml ..."


3
Mặc dù câu trả lời của Cletus rất nhiều thông tin, nhưng câu trả lời này theo nghĩa chặt chẽ hơn những gì tôi đang tìm kiếm (dường như không có bất kỳ cơ chế báo cáo tệp cài đặt nào trong chính Maven)
harschware
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.