2012-04-30 38 views
16

hôm nay tôi đã quan sát thấy rằng số lượng maven proprties được xác định trong settings.xml ghi đè lên số trong pom.xml.Thứ tự ghi đè thuộc tính Maven trong tệp pom.xml và settings.xml là gì?

Bởi vì nó chỉ là một quan sát, tôi không chắc chắn nếu điều này là hoàn toàn chính xác. Vì vậy, tôi đang tìm kiếm tài liệu tham khảo hoặc một số bài viết nhưng tôi không tìm thấy tuyên bố cụ thể nào về hành vi ghi đè các thuộc tính được xác định có cùng tên trong settings.xmlpom.xml.

Có thể ai đó có thể cung cấp liên kết đến phần tham chiếu (mà tôi có thể bỏ qua) hoặc bài viết/blog đáng tin cậy?

+0

Bạn có hồ sơ có cùng id hoặc với id khác không? – khmarbaise

+0

Các thuộc tính trong POM không có bất kỳ cấu hình nào; các properies trong tệp settings.xml được đặt trong một cấu hình với một id được sử dụng không có nơi nào khác. – Ralph

+0

Nhưng nếu các thuộc tính của bạn có cùng tên trong pom cũng như trong tệp settings.xml thì chúng sẽ bị ghi đè bởi các giá trị của chúng đến từ tệp settings.xml. Nếu không nó sẽ không thể ghi đè lên các thuộc tính của một hồ sơ. – khmarbaise

Trả lời

16

Dựa trên documentation theo ý kiến ​​của tôi rõ ràng mà người ta lấn át nhau (trích lục tài liệu):

Nếu một hồ sơ cá nhân đang hoạt động từ cài đặt, giá trị của nó sẽ ghi đè lên bất kỳ ID tương đương 'd hồ sơ trong tệp POM hoặc profiles.xml.

Tệp profiles.xml không còn tồn tại trong Maven 3 chỉ trong Maven 2.2.1 nó được hỗ trợ nhưng không nên sử dụng.

7

Tôi nghĩ rằng các thuộc tính với tên bằng được ghi đè theo thứ tự tiếp theo (từ cao nhất đến bối cảnh thấp nhất):

  • toàn cầu
  • hồ sơ mô tả
  • mỗi dự án
  • mỗi người dùng

http://maven.apache.org/guides/introduction/introduction-to-profiles.html

Do đó, pom.xml thuộc tính (mỗi dự án) bị ghi đè bởi các thuộc tính settings.xml (mỗi người dùng) có tên bằng nhau.

+0

Bất kỳ ý tưởng nào '-D' được tính là? – Christian

1

Chỉ cần thử nghiệm trên con quạ của tôi 3.3.9.

Trước hết, các thuộc tính luôn được xác định trong cấu hình, nếu chúng ta đang nói về settings.xml. Thuộc tính từ cài đặt chung XML có ưu tiên cao nhất và sẽ ghi đè cả người dùng settings.xmlpom.xml, UNLESS cụ thể có va chạm tên giữa các cấu hình.

Nếu đúng như vậy, có một cấu hình có cùng id trong cài đặt người dùng toàn cầu, cũng như pom.xml, người dùng/local settings.xml là sếp. Ngay cả khi thuộc tính trong pom.xml không nằm trong hồ sơ, người dùng/địa phương settings.xml thuộc tính từ hồ sơ hoạt động có cùng tên sẽ đánh bại nó. Ngẫu nhiên, toàn cầu settings.xml cũng sẽ đánh bại thuộc tính pom.xml mà không có hồ sơ.

Như một mặt lưu ý: Đối <repositories><mirrors> logic là hơi khác nhau:

  • tài/thiết lập địa phương có ưu tiên cao hơn toàn cầu cho <mirrors>.
  • Tuy nhiên, đối với <repositories>: pom - cao nhất, sau đó - địa phương, sau đó - toàn cầu.
Các vấn đề liên quan