Làm thế nào để ghi đè thuộc tính maven trong dòng lệnh?


91

Tôi có bản pom đơn giản sau đây đang chạy bởi Maven 3.0.4.

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>com.example</groupId>
    <artifactId>test</artifactId>
    <version>1.0</version>
    <packaging>jar</packaging>

</project>

Tôi đang cố gắng ghi đè cài đặt mặc định trong dòng lệnh như sau:

mvn -Dproject.build.finalName=build clean package

Nhưng điều này bị bỏ qua, và tôi nhận được test-1.0.jar. Tôi đã cố gắng thay đổi các thuộc tính khác, như outputDirectory, directory, ArtifactId, nhưng cũng không thành công.

Cách thích hợp để làm điều này là gì?

Câu trả lời:


135

Xem Giới thiệu về POM

finalName được tạo thành:

<build>
    <finalName>${project.artifactId}-${project.version}</finalName>
</build>

Một trong những giải pháp là thêm tài sản riêng:

<properties>
    <finalName>${project.artifactId}-${project.version}</finalName>
</properties>
<build>
    <finalName>${finalName}</finalName>
 </build>

Và bây giờ hãy thử:

mvn -DfinalName=build clean package


5
Đó có phải là cách duy nhất để làm điều đó? Điều gì sẽ xảy ra nếu tôi không thể thực hiện thay đổi đối với tệp POM?
glaz666 14/12/12

1
Tôi cần ghi đè finalNamethông qua dòng lệnh mà không thay đổi POM. Điều đó có khả thi không?
glaz666 14/12/12

1
Ok, nó không khả dụng, vì bạn chỉ có thể ghi đè các thuộc tính do người dùng xác định, không phải Thuộc tính Maven vì chúng là thuộc tính của lớp Model. Giải pháp được mô tả trong câu trả lời.
glaz666 17/12/12

7
Để ghi đè nhiều tham số, hãy sử dụng nhiều cờ -D. Nếu ai đang thắc mắc.
Matthias

3
Ngoài ra, nếu tài sản mà bạn đang cố gắng để ghi đè có thời gian, bạn có thể cần phải đặt nó bên trong dấu ngoặc kép duy nhất như:mvn '-Dproject.build.finalName=build' clean package
Xantix
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.