2011-08-15 9 views
21

Mục tiêu "cài đặt" sao chép phần tạo tác vào thư mục đích và tới kho lưu trữ cục bộ.Maven: làm thế nào để sao chép tạo tác vào thư mục cụ thể?

Làm thế nào tôi có thể yêu cầu Maven sao chép nó cũng vào một thư mục nhất định (như thư mục triển khai của JBoss chẳng hạn).

+3

Đối với JBoss không có nhu cầu * sao chép tập tin để triển khai các thư mục * - có một [đặc biệt Plugin maven] (http://mojo.codehaus.org/jboss-maven-plugin/deploy-mojo.html). –

+1

Tuy nhiên độ tin cậy của jboss "plugin maven đặc biệt" là một phần đáng ngờ. –

Trả lời

16

Mục tiêu copy của maven-phụ thuộc-plugin không những gì bạn muốn, xem example. Tuy nhiên, không nên sao chép bất kỳ thứ gì bên ngoài thư mục đích của bạn (hoặc ${project.build.directory}) - đặc biệt nếu hành động đó được gắn với pha xây dựng, vì nó giới thiệu các tác dụng phụ không mong muốn của bản dựng và đôi khi thậm chí mất khả năng tái lập.

Như ghi chú @Andreas_D, có một giải pháp thay thế tốt hơn cho mục đích triển khai JBoss; tương tự để triển khai cho các trình ứng dụng khác.

8

Nếu bạn muốn sao chép tập tin vào một máy chủ web (địa phương hoặc từ xa), bạn có thể sử dụng Maven upload plugin:

   <plugin> 
        <groupId>com.atlassian.maven.plugins</groupId> 
        <artifactId>maven-upload-plugin</artifactId> 
        <version>1.1</version> 
        <configuration> 
         <resourceSrc> 
          ${project.build.directory}/${project.build.finalName}.${project.packaging} 
         </resourceSrc> 
         <resourceDest>${jboss.deployDir}</resourceDest> 
         <serverId>${jboss.host}</serverId> 
         <url>${jboss.deployUrl}</url> 
        </configuration> 
       </plugin> 

Và để cấu hình các thông số một cách thông minh, tôi sử dụng các cấu maven:

<profiles> 
    <!-- local deployment --> 
    <profile> 
     <id>developpement</id> 
     <properties> 
      <jboss.host>localhost</jboss.host> 
      <jboss.deployDir>appli/jboss-4.0.4.GA/server/default/deploy/</jboss.deployDir> 
      <jboss.deployUrl>file://C:/</jboss.deployUrl> 
     </properties> 
    </profile> 
    <!-- distant deployment --> 
    <profile> 
     <id>validation</id> 
     <properties> 
      <jboss.host>ENV_val</jboss.host> 
      <jboss.deployDir>/home/envval/jboss/server/default/deploy/</jboss.deployDir> 
      <jboss.deployUrl>scp://PROJECT_LAN_HOST</jboss.deployUrl> 
     </properties> 
    </profile> 
</profiles> 

tôi đã tạo ra một "phóng con kiến", để sử dụng nó bằng cách nhấn vào dưới Eclipse xem ant:

<target name="copy war to JBoss local" description="Copy war to local JBoss"> 
    <maven goal="upload:upload" options="-Pdeveloppement" /> 
</target> 

Nhưng bạn có thể chỉ cần chạy nó trên một dòng lệnh:

mvn upload:upload -Pdeveloppement 

Bằng cách này, để triển khai ở xa, bạn có thể cần mật khẩu đăng nhập để hoạt động. Bạn cần phải thêm chúng vào bạn Maven tập tin settings.xml:

<settings> 
    ... 
    <servers> 
    <server> 
     <id>ENV_val</id> 
     <username>login</username> 
     <password>password</password> 
    </server> 
    </servers> 
    ... 
</settings> 
+0

Điều này tương đương với mục tiêu khó triển khai của plugin jboss-maven – Tristan

2

Cách tiếp cận tốt nhất là sử dụng plugin sẽ triển khai ứng dụng của bạn, chẳng hạn như cargo hoặc jboss-maven plugin (ghi có vào @Andreas_D cho điều đó).

Đây sẽ là cách tiếp cận tốt hơn để sử dụng công cụ tải lên hoặc sao chép chung vì triển khai là những gì bạn đang thực sự cố gắng thực hiện.

Với plugin hàng hóa, bạn có tùy chọn để deploy to a variety of running servers. Chúng tôi đã sử dụng phương pháp này để thử nghiệm cục bộ tại cầu cảng bằng cách sử dụng jetty plugin trong quá trình xây dựng và có hồ sơ triển khai tới tomcat theo yêu cầu thông qua hàng hóa.

Lưu ý: Nếu bạn có máy chủ đích (JBOSS) được cài đặt cục bộ trên hộp dev thì bạn cũng có thể sử dụng hàng để khởi động/dừng máy chủ trong quá trình xây dựng. Nhược điểm của phương pháp này là bạn sẽ cần nó để tham khảo vị trí của nó trong tệp pom, do đó, hoặc tất cả các dev cài đặt nó trong cùng một vị trí hoặc thuộc tính hệ thống xác định vị trí của nó (tương tự như JAVA_HOME).

+0

Tôi đã bỏ phiếu này xuống vì nó không trả lời câu hỏi cụ thể của OP, đó là cách sao chép các tạo phẩm. OP không yêu cầu lựa chọn thay thế. –

9

Theo http://maven.apache.org/plugins/maven-dependency-plugin/examples/copying-artifacts.html bạn có thể sao chép các vật chỉ được xây dựng vào một thư mục cụ thể:

<project> 
    [...] 
    <build> 
     <plugins> 
     <plugin> 
      <groupId>org.apache.maven.plugins</groupId> 
      <artifactId>maven-dependency-plugin</artifactId> 
      <version>2.8</version> 
      <executions> 
      <execution> 
       <id>copy-installed</id> 
       <phase>install</phase> 
       <goals> 
       <goal>copy</goal> 
       </goals> 
       <configuration> 
       <artifactItems> 
        <artifactItem> 
        <groupId>${project.groupId}</groupId> 
        <artifactId>${project.artifactId}</artifactId> 
        <version>${project.version}</version> 
        <type>${project.packaging}</type> 
        </artifactItem> 
       </artifactItems> 
       <outputDirectory>some-other-place</outputDirectory> 
       </configuration> 
      </execution> 
      </executions> 
     </plugin> 
     </plugins> 
    </build> 
    [...] 
    </project>