Làm cách nào để chạy Maven từ thư mục khác (không có cd vào dự án dir)?


247

Giả sử dự án maven của tôi được đặt /some/location/projectvà vị trí hiện tại của tôi là /another/location/làm thế nào tôi có thể chạy maven build mà không thay đổi vị trí dự án cd /some/location/project?


4
@khmarbaise - Tôi đang cố gắng tự động hóa việc xây dựng và triển khai bằng một số tập lệnh shell và không phải lúc nào cũng sử dụng cd để thay đổi dir.
Ali Shakiba

@khmarbaise - bạn có thể muốn tham khảo nhiều tệp hoặc thư mục trong hoặc gần một thư mục, nhưng pom và các tệp mà nó đề cập đến nằm trong một tệp khác.
jyoungdev

Câu trả lời:


431

Bạn có thể sử dụng tham số -fvà chỉ định đường dẫn đến tệp pom của mình, vdmvn -f /path/to/pom.xml

Cái này chạy maven "như thể" nó nằm trong /path/tothư mục làm việc.


39
Không, -f khởi động Maven với pom cụ thể đó và theo định nghĩa thư mục chứa pom là thư mục làm việc cho Maven. Tôi sử dụng điều này trong CI-Server của tôi để xây dựng các mô-đun cụ thể trong các thư mục con và tôi có thể đảm bảo với bạn rằng nó hoạt động.
dunni

15
Sử dụng một dấu chấm cho các đường dẫn tương đối. ví dụ./path/pom.xml
Snekse

3
Như dunni nói, điều này không hoạt động. Các dir hiện tại là nơi bạn đang có. Bạn chỉ đang sử dụng một pom trong một thư mục khác. Maven không hỗ trợ điều này.
sương

1
java.lang.IllegalArgumentException: Parameter 'thư mục' không phải là một thư mục
Damir Olejar

Làm việc cho hầu hết các dự án của tôi. Thật không may, một số dự án sử dụng plugin exec không thể được xây dựng theo cách này vì plugin không tìm thấy tệp thực thi mặc dù thư mục làm việc được cấu hình.
dùng2043553

15

Tôi không nghĩ maven ủng hộ điều này. Nếu bạn đang dùng Unix và không muốn rời khỏi thư mục hiện tại của mình, bạn có thể sử dụng tập lệnh shell nhỏ, hàm shell hoặc chỉ là shell phụ:

user@host ~/project$ (cd ~/some/location; mvn install)
[ ... mvn build ... ]
user@host ~/project$

Là một hàm bash (mà bạn có thể thêm vào ~ / .bashrc):

function mvn-there() {
  DIR="$1"
  shift
  (cd $DIR; mvn "$@")     
} 

user@host ~/project$ mvn-there ~/some/location install)
[ ... mvn build ... ]
user@host ~/project$

Tôi nhận ra điều này không trả lời câu hỏi cụ thể, nhưng có thể cung cấp cho bạn những gì bạn đang theo đuổi. Tôi không quen thuộc với Windows shell, mặc dù bạn cũng có thể đạt được một giải pháp tương tự ở đó.

Trân trọng


4
Thông minh. mvn -f param không hoạt động với các dự án đa mô hình sử dụng đường dẫn tương đối để tham chiếu các poms con. Cảm ơn, đó là những gì tôi đang tìm kiếm.
redochka

1
Điều này hoạt động trên Mac (và tôi biết nó sẽ hoạt động trên Linux). Trên Windows (hoặc bất kỳ nền tảng nào), bạn sẽ có thể lưu đường dẫn hiện tại, cd vào dự án của bạn, thực hiện công cụ mvn ở đó và cd trở lại trong một tập lệnh. Vấn đề duy nhất là nếu kịch bản dừng giữa chừng.
Erk


0

Bạn có thể thử điều này:

pushd ../
maven install [...]
popd
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.