2014-12-30 11 views
16

Tôi có một số hiện vật từ cùng một nhómId (org.webjars) và tôi cần phải giải nén chúng, sau đó sao chép tất cả các tệp js chứa vào cùng một thư mục.Maven: Làm cách nào để giải nén các tệp chính xác khỏi các tạo phẩm trong cùng một thư mục đầu ra?

Các hiện vật tài liệu lưu trữ có một hệ thống phân cấp (nén như một jar) như sau:

artifact1 
    - resources 
     - webjars 
      - ... 
       - sample-1.js 
       - sample-2.js 

tôi cần ở cuối mỗi js tập tin được sao chép vào cùng thư mục mà không cần hệ thống cấp bậc của họ, như sau:

outputDirectory 
    - sample-1.js 
    - sample-2.js 
    - ... 
    - sample-n.js 

kết quả tôi có thể đạt được là một sau:

outputDirectory 
    - artifact-1 
     - resources 
      - webjars 
       - ... 
        - sample-1.js 
        - sample-2.js 
    - ... 
    - artifact-m 
     - resources 
      - webjars 
       - ... 
        - sample-n.js 

Đối mục đích này, tôi đã sử dụng maven-dependency-plugin:

<plugin> 
    <groupId>org.apache.maven.plugins</groupId> 
    <artifactId>maven-dependency-plugin</artifactId> 
    <executions> 
     <execution> 
      <id>unpack org.webjars dependencies</id> 
      <goals> 
       <goal>unpack-dependencies</goal> 
      </goals> 
      <configuration> 
      <includeGroupIds>org.webjars</includeGroupIds> 
      <includes>**/*.js</includes> 
      <outputDirectory>${project.build.directory}/static</outputDirectory> 
      </configuration> 
     </execution> 
    </executions> 
</plugin> 

Có một lựa chọn huyền diệu của plugin này để làm điều này, hay tôi nên cần plugin khác để hoàn thành công việc?

EDIT: Đây là giải pháp cuối cùng tôi đã sử dụng:

<plugin> 
    <groupId>org.apache.maven.plugins</groupId> 
    <artifactId>maven-antrun-plugin</artifactId> 
    <executions> 
     <execution> 
      <id>copy org.webjars dependency to jar</id> 
      <phase>package</phase> 
      <goals><goal>run</goal></goals> 
      <configuration> 
       <target> 
        <copy todir="${project.build.directory}/classes/static" flatten="true"> 
         <fileset dir="${project.build.directory}/static"> 
            <include name="**/*.js"/> 
         </fileset> 
        </copy> 
       </target> 
      </configuration> 
      </execution> 
    </executions> 
</plugin> 
<!-- Force the generation of the jar to be done after the javascript dependencies have been copied. 
Note : This is a half solution, as the jar is generated twice: a first time before the javascript get copied, and 
another one after. As a result, there is the correct jar, but after two creations... --> 
<plugin> 
    <groupId>org.apache.maven.plugins</groupId> 
    <artifactId>maven-jar-plugin</artifactId> 
    <executions> 
     <execution> 
      <id>Force the jar-plugin to be called after the javascripts dependencies have been copied to be embedded</id> 
      <phase>package</phase> 
      <goals><goal>jar</goal></goals> 
      </execution> 
     </executions> 
</plugin> 
+0

1 năm sau và câu trả lời của bạn vẫn hữu ích !! –

+0

2 năm sau và câu trả lời của bạn vẫn hữu ích !! –

+0

Bạn có thể thay đổi giai đoạn thực hiện của plugin antrun để chuẩn bị gói. Sau đó, bạn không phải tái tạo lại cái bình. – David

Trả lời

6

Bạn có thể sử dụng các plugin maven antrun bằng công nhiệm vụ sao chép với các tùy chọn flatten vì nó được mô tả trong các chủ đề sau: Maven : copy files without subdirectory structure

nhất

+1

Tôi tự hỏi liệu có bất kỳ giải pháp nào bằng cách sử dụng plugin phụ thuộc không, nhưng có vẻ như đây không phải là trường hợp. Tôi sợ phải sử dụng plugin lắp ráp, nhưng antrun chỉ là giải pháp không phải là xấu. Cảm ơn bạn đã giúp đỡ! –

+0

Không thể tin được rằng điều này không thể thực hiện được. Ghét maven !!! –

0

Bạn có thể để có được gần gũi hơn một chút bằng <useSubDirectoryPerArtifact>false</useSubDirectoryPerArtifact>. Nhưng tôi nghĩ rằng mục tiêu unpack-dependencies vẫn sẽ bao gồm đường dẫn đầy đủ của các tệp từ các tạo phẩm mà nó mở rộng.

+0

Thật không may, điều này không làm các trick. Dù sao cũng cảm ơn bạn! –

0

Chỉ cần đi qua một vấn đề tương tự, và (kể từ khi tôi 'm không phải là một fan hâm mộ lớn của chạy Ant Antiquated bên trong của Maven, ngày và tuổi tác này) tôi đã kết thúc bằng cách sử dụng org.apache.portals.jetspeed-2:jetspeed-unpack-maven-plugin (liên kết mvnrepository here). Trong cấu hình < tài nguyên > của mình, bạn có thể chỉ định tùy chọn < phẳng > đúng </flat > sẽ làm phẳng cấu trúc thư mục như mong muốn.

Các vấn đề liên quan