Tôi có một dự án được cấu hình để xây dựng và chạy với Maven. Dự án phụ thuộc vào các thư viện gốc cụ thể trên nền tảng và tôi đang sử dụng chiến lược tìm thấy here để quản lý các phụ thuộc đó.Sử dụng lệnh Maven 'exec: exec' với Arguments
Về cơ bản, các tệp .dll
hoặc .so
cho một nền tảng cụ thể được đóng gói vào một bình và được đẩy tới máy chủ Maven với trình phân loại xác định nền tảng đích. Plugin maven-dependency-plugin sau đó mở gói jar cụ thể của nền tảng và sao chép các thư viện gốc vào thư mục đích.
Thông thường tôi sẽ sử dụng mvn exec:java
để chạy chương trình Java, nhưng exec:java
chạy các ứng dụng trong cùng một JVM như Maven, điều này ngăn cản tôi sửa đổi đường dẫn lớp. Vì phụ thuộc gốc phải được thêm vào đường dẫn lớp, nên tôi buộc phải sử dụng mvn exec:exec
thay thế. Đây là đoạn mã có liên quan của pom:
...
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>exec-maven-plugin</artifactId>
<version>1.2.1</version>
<configuration>
<executable>java</executable>
<arguments>
<argument>-Djava.library.path=target/lib</argument>
<argument>-classpath</argument>
<classpath />
<argument>com.example.app.MainClass</argument>
</arguments>
</configuration>
</plugin>
...
Điều này phù hợp với cấu hình mặc định của ứng dụng, nhưng tôi muốn có thể chỉ định một số tham số tùy chọn tại dòng lệnh. Lý tưởng nhất, tôi muốn làm một cái gì đó như thế này:
mvn exec:exec -Dexec.args="-a <an argument> -b <another argument>"
Thật không may, xác định biến exec.args
ghi đè các đối số tôi có trong pom (mà được yêu cầu phải thiết lập classpath và chạy các ứng dụng). Có cách nào để giái quyết vấn đề này không? Cách tốt nhất để chỉ định một số đối số tùy chọn ở dòng lệnh mà không ghi đè những gì tôi có trong pom là gì?
Và cách thứ ese đối số có thể được truy cập trong mã Java, tôi có nghĩa là dòng này: 'String [] args'? – zygimantus
@zygimantus bạn muốn 'mvn exec: java -Dexec.mainClass =" path.to.your.class "-Dexec.args =" arg1 arg2 "' nằm ngoài phạm vi của câu hỏi gốc. – dr0i