Chỉ định vị trí kho lưu trữ cục bộ của Maven làm tham số CLI


131

Có thể đặt vị trí của kho lưu trữ Maven cục bộ làm đối số trên dòng lệnh Maven không?

Có điều là tôi không sử dụng cái mặc định ~/.m2/repository. Tuy nhiên tôi đã kiểm tra một số dự án đang được xây dựng với các cài đặt riêng của nó với -s settings.xml. Cài đặt đó không chỉ định kho lưu trữ cục bộ của tôi, vì vậy Maven sử dụng ~/.m2/repositorylại sử dụng ... Tôi muốn sử dụng một vị trí kho lưu trữ cục bộ không mặc định mà không phải thêm một <localRepository>phần tử trong tệp settings.xml của dự án

Tôi đã thử

  • -DlocalRepository="..."
  • $mvn invoker:run -s settings.xml clean install -DskipTests -DlocalRepositoryPath=
  • -Dsettings.localRepository

nhưng không có tùy chọn nào trong số này hoạt động.

Vì vậy, tôi nghĩ rằng tôi phải quyết định liệu tôi sẽ sửa đổi tệp cài đặt của bên thứ ba hay chuyển repo cục bộ của tôi sang ~


Rõ ràng đây không phải là lỗi của bạn, nhưng các dự án Maven không nên cung cấp settings.xml. Xem maven.apache.org/guides/mini/guide-configuring-maven.html
oberlies 10/03/2015

Câu trả lời:


258

sử dụng tài sản maven maven.repo.local:

mvn -Dmaven.repo.local=$HOME/.my/other/repository clean install

Không có sửa đổi settings.xmllà cần thiết.


10
Kho lưu trữ cục bộ phải là một đường dẫn tuyệt đối, maven.apache.org/guides/mini/guide-configuring-maven.html .
luka5z

3
Trên Windows sử dụng 'mvn -D "maven.repo.local" sạch / khác / kho của tôi cài đặt' =% USER_HOME% /.
Igor Bljahhin

Tôi có thể đặt biến môi trường để đạt được điều tương tự không?
bột366

@ Powder366 không, AFAIK
Petr Kozelka

Sử dụng maven-3.6.3, thư mục kho lưu trữ cục bộ hoạt động như một đường dẫn tương đối (ít nhất là trên MacOS)
Ed Randall

8

Đối với git:

alias mvn='mvn "-Dmaven.repo.local=$(git rev-parse --show-toplevel)/.m2/repository"'

Điều này sử dụng một kho lưu trữ maven riêng trong mỗi kho git


2

Một cách thức hacky sẽ hoạt động là:

  1. Thêm vào tệp <localRepository>${m2.localRepository}</localRepository>cài đặt của bạn
  2. Trong mvn.sh hoặc mvn.bat của bạn, hãy thêm -Dm2.localRepository=<full path to home dir>/.m2/repository trước "$ @" trong lệnh được thực thi. Điều này sẽ làm cho repo cục bộ mặc định của bạn ở đúng nơi nó cần.
  3. Bây giờ bạn có thể sử dụng mvn -Dm2.localRepository=... <phases/goals>. Bởi vì thuộc tính hệ thống dòng lệnh của bạn được thêm vào dòng lệnh sau một trong tập lệnh mvn, nên nó sẽ được ưu tiên. (Ít nhất tôi khá chắc chắn rằng nó hoạt động theo cách đó trên cả windows và linux, nhưng thử nghiệm sẽ cho biết.)

Điều đó không có ích, tôi đã thêm -Dm2.localRep repository = "custom" trước "$ @" vào tập lệnh mvn, vẫn sử dụng ~ / .m2 / repository ... sau đó tôi cũng bao gồm -Dm2.localRep repository = "custom" khi chạy $ mvn, vẫn sử dụng ~ / .m2 / kho lưu trữ ... đơn giản là không có phần tử
localRep repository trong tệp

@lisak: Bạn đã thực hiện bước 1 trong việc thêm phần tử localRep repository vào tệp settings.xml chưa? Tôi đã thử nghiệm điều này và nó hoạt động, ngoại trừ việc bạn thực sự không thể sử dụng bí danh '~' trong tập lệnh mvn. Bạn phải đặt một đường dẫn tuyệt đối, mặc dù bạn có thể thực hiện một số thủ thuật kịch bản shell / batch khác để khắc phục điều đó.
Ryan Stewart

Nó hoạt động, nhưng tôi thực sự không có lời giải thích ... Nếu tôi khai báo localRep repository trong $ M2_HOME / conf / settings.xml mà không có bước 2, thì nó bị ghi đè bởi -s settings.xml và không hoạt động, mặc dù với bước 2 nó hoạt động ... nhưng chỉ có bước 2 mà không có localRep repository trong $ M2_HOME / conf / settings.xml không hoạt động ... cả hai bước 1,2 phải được áp dụng để nó hoạt động và tôi thậm chí có thể thay đổi vị trí sau đó thông qua $ mvn -Dm2.localRep repository = .. cảm ơn Ryan
lisak
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.