2011-09-22 34 views
64

Có thể chuyển đối số từ dòng lệnh đến thuộc tính trong tệp pom.xml không? ví dụ tôi chạy mvn ... argumentTruyền đối số dòng lệnh từ Maven dưới dạng thuộc tính trong pom.xml

và trong pom.xml

<properties> 
    <myproperty> here should add argument from command line</myproperty> 
</properties> 

Cảm ơn bạn đã giúp đỡ.

+0

Không trực tiếp những gì bạn đang yêu cầu cho nhưng [maven hồ sơ] (http://maven.apache.org/guides/introduction/introduction-to-profiles.html) có thể hữu ích cho số này – Sig

+0

yea Tôi biết về tiểu sử. Tôi đang sử dụng maven-soapui-plugin trong đó trong ... là tên đã được xóa của dự án. Tôi có khoảng 10 dự án và tôi không muốn cho mỗi hồ sơ dự án mới. Tôi muốn sử dụng đối số để chạy mvn ... project1 để chạy project1 và mvn ... project2 để chạy project2 – hudi

Trả lời

83

Ví dụ tài sản của bạn làm:

mvn install "-Dmyproperty=my property from command line" 

Lưu ý dấu ngoặc kép quanh định nghĩa bất động sản nói chung. Bạn sẽ cần chúng nếu thuộc tính của bạn chứa khoảng trống.

+10

Cũng lưu ý rằng nếu bạn có cả thuộc tính trong pom và trên dòng lệnh, dòng lệnh sẽ mất ưu tiên. Điều này có thể hữu ích cho việc cung cấp mặc định có thể ghi đè. –

11

Bên pom.xml

<project> 

.....

<profiles> 
    <profile> 
     <id>linux64</id> 
     <activation> 
      <activeByDefault>true</activeByDefault> 
     </activation> 
     <properties> 
      <build_os>linux</build_os> 
      <build_ws>gtk</build_ws> 
      <build_arch>x86_64</build_arch> 
     </properties> 
    </profile> 

    <profile> 
     <id>win64</id> 
     <activation> 
      <property> 
       <name>env</name> 
       <value>win64</value> 
      </property> 
     </activation> 
     <properties> 
      <build_os>win32</build_os> 
      <build_ws>win32</build_ws> 
      <build_arch>x86_64</build_arch> 
     </properties> 
    </profile> 
</profiles> 

.....

<plugin> 
    <groupId>org.eclipse.tycho</groupId> 
    <artifactId>target-platform-configuration</artifactId> 
    <version>${tycho.version}</version> 
    <configuration> 
     <environments> 
      <environment> 
       <os>${build_os}</os> 
       <ws>${build_ws}</ws> 
       <arch>${build_arch}</arch> 
      </environment> 
     </environments> 
    </configuration> 
</plugin> 

.....

Trong này ví dụ khi bạn chạy pom mà không có bất kỳ đối số mvn clean install hồ sơ mặc định sẽ thực thi.

Khi được thực hiện với mvn -Denv=win64 clean install

cấu hình win64 sẽ được thực thi.

Vui lòng tham khảo http://maven.apache.org/guides/introduction/introduction-to-profiles.html

2

Bạn có thể đặt tên biến làm tệp dự án. Ví dụ trong bạn cắm cấu hình cho duy nhất một thẻ như sau: -

<projectFile>${projectName}</projectFile> 

Sau đó, trên dòng lệnh, bạn có thể vượt qua các tên dự án như tham số: -

mvn [your-command] -DprojectName=[name of project] 
+0

Tôi muốn cung cấp tên trình duyệt và môi trường trong lệnh mvn. Nếu tôi không cung cấp nó sẽ chọn mặc định. Làm thế nào để làm điều đó? – paul

5

tôi đã sử dụng các thuộc tính plugin để giải quyết việc này .

Thuộc tính được xác định trong pom và được ghi vào tệp my.properties, sau đó chúng có thể được truy cập từ mã Java của bạn.

Trong trường hợp của tôi nó là mã kiểm tra mà cần phải truy cập vào tập tin thuộc tính này, vì vậy trong pom các tập tin thuộc tính được ghi vào testOutputDirectory maven của:

<configuration> 
    <outputFile>${project.build.testOutputDirectory}/my.properties</outputFile> 
</configuration> 

Sử dụng outputDirectory nếu bạn muốn tính để có thể truy cập bằng cách của bạn mã ứng dụng:

<configuration> 
    <outputFile>${project.build.outputDirectory}/my.properties</outputFile> 
</configuration> 

đối với những người tìm kiếm một ví dụ đầy đủ hơn (nó đã cho tôi một chút không quan trọng để làm việc này vì tôi không hiểu làm thế nào đặt tên của thuộc tính thẻ ảnh hưởng đến khả năng lấy chúng ở đâu đó trong tập tin pom), pom của tôi trông như f OLLOWS:

<dependencies> 
    <dependency> 
     ... 
    </dependency> 
</dependencies> 

<properties> 
    <app.env>${app.env}</app.env> 
    <app.port>${app.port}</app.port> 
    <app.domain>${app.domain}</app.domain> 
</properties> 

<build> 
    <plugins> 
     <plugin> 
      <groupId>org.apache.maven.plugins</groupId> 
      <artifactId>maven-surefire-plugin</artifactId> 
      <version>2.20</version> 
     </plugin> 
     <plugin> 
      <groupId>org.codehaus.mojo</groupId> 
      <artifactId>properties-maven-plugin</artifactId> 
      <version>1.0.0</version> 
      <executions> 
       <execution> 
        <phase>generate-resources</phase> 
        <goals> 
         <goal>write-project-properties</goal> 
        </goals> 
        <configuration> 
         <outputFile>${project.build.testOutputDirectory}/my.properties</outputFile> 
        </configuration> 
       </execution> 
      </executions> 
     </plugin> 

    </plugins> 
</build> 

Và trên dòng lệnh:

mvn clean test -Dapp.env=LOCAL -Dapp.domain=localhost -Dapp.port=9901 

Vì vậy, các đặc tính này có thể được truy cập từ mã Java:

java.io.InputStream inputStream = Thread.currentThread().getContextClassLoader().getResourceAsStream("my.properties"); 
java.util.Properties properties = new Properties(); 
properties.load(inputStream); 
appPort = properties.getProperty("app.port"); 
appDomain = properties.getProperty("app.domain"); 
Các vấn đề liên quan