2011-01-21 20 views
20

khi tôi tạo một gói chiến dịch với maven, tệp và thư mục trong thư mục "src/main/resources" được sao chép trong/WEB-INF/classes thay vì/WEB-INF. Làm cách nào để tôi sao chép chúng vào/WEB-INF?Maven: làm thế nào để có được một gói chiến tranh với các tài nguyên được sao chép trong WEB-INF?

cảm ơn, rand

UPDATE: trong pom của tôi bây giờ tôi sử dụng này:

<plugin> 
      <artifactId>maven-resources-plugin</artifactId> 
      <version>2.4.3</version> 
      <executions> 
       <execution> 
        <id>copy-resources</id> 
        <!-- here the phase you need --> 
        <phase>war</phase> 
        <goals> 
         <goal>copy-resources</goal> 
        </goals> 
        <configuration> 
         <outputDirectory>myapp/target/WEB-INF</outputDirectory> 
         <resources> 
          <resource> 
           <directory>src/main/resources</directory> 
           <filtering>true</filtering> 
          </resource> 
         </resources> 
        </configuration> 
       </execution> 
      </executions> 
     </plugin> 

và tôi khởi động mvn với:

mvn -Dmaven.test.skip = tài nguyên gói thực sự sạch sẽ: bản sao tài nguyên

nhưng tôi nhận được: [INFO] Một hoặc nhiều thông số plugin bắt buộc không hợp lệ/bị thiếu cho 'tài nguyên: sao chép tài nguyên'

[0] Bên trong định nghĩa cho plugin 'maven-resources-plugin' chỉ định những điều sau:

... VALUE .

[1] Bên trong định nghĩa cho plugin 'maven-nguồn-plugin' xác định như sau:

... GIÁ TRỊ .

Tôi đang sử dụng maven 2.2 và đoạn mã cơ bản giống với tài liệu bất kỳ ý tưởng nào?

+0

không chạy mục tiêu 'tài nguyên: sao chép tài nguyên', nó tự động được bao gồm trong phần' sao chép tài nguyên' (ở dưới đó trong câu trả lời của tôi)) – coubeatczech

Trả lời

27

hoặc định cấu hình tham số outputDirectory của resources:resources plugin hoặc đặt tệp của bạn theo thư mục src/main/webapp/WEB-INF/. resource plugin

EDIT:

Cấu hình này đang làm việc cho tôi:

<plugin> 
    <groupId>org.apache.maven.plugins</groupId> 
    <artifactId>maven-resources-plugin</artifactId> 
    <version>2.4.2</version> 
    <executions> 
     <execution> 
     <id>default-copy-resources</id> 
     <phase>process-resources</phase> 
     <goals> 
      <goal>copy-resources</goal> 
     </goals> 
     <configuration> 
      <overwrite>true</overwrite> 
      <outputDirectory>${project.build.directory}/${project.artifactId}-${project.version}/WEB-INF/</outputDirectory> 
      <resources> 
      <resource> 
       <directory>${project.basedir}/src/main/resources</directory> 
      </resource> 
      </resources> 
     </configuration> 
     </execution> 
    </executions> 
    </plugin> 

bạn có thể chạy một giai đoạn theo hình thức somePhase hoặc một mục tiêu somePlugin:someGoal. Các lời gọi pha sẽ gọi tất cả các mục tiêu bổ sung được nối vào các pha trong khoảng thời gian [validate, phase] theo thứ tự, do đó không cần phải gọi chúng một cách rõ ràng.

+0

Cảm ơn bạn đã trả lời, hãy kiểm tra câu trả lời của tôi trong bản cập nhật ở trên – Randomize

+0

Có thể sử dụng '$ {project.build.finalName}' thay vì '$ {project.artifactId} - $ {project.version}' để nhận tên của hiện vật. – ivanjovanovic

24

Tài nguyên web không giống như tài nguyên java, nên được đặt trong đường dẫn lớp. Tài nguyên web được xử lý thông qua plugin chiến tranh và phải được đặt vào src\main\webapp\WEB-INF\. Trong trường hợp này, nó sẽ hoạt động tự động mà không có bất kỳ cấu hình bổ sung nào trong pom.xml

+0

Nhưng, làm thế nào để đối phó với 'tài nguyên java', nếu nó không được triển khai tự động đến vị trí yêu cầu của nó? – Eddy

+0

@Eddy Nếu nó không được triển khai vào "địa điểm yêu cầu", có lẽ nó có nghĩa là bạn đặt nó ở vị trí sai mã nguồn.Cung cấp thêm chi tiết. – kan

+0

Bạn đã đúng! Trong trường hợp này: khi sử dụng maven và chạy 'mvn clean'. sau đó maven sẽ không triển khai lại nó cho tôi khi đặt tài nguyên dưới 'src/main/java' thay vì' src/main/resources'. Tôi đang sử dụng nhật thực. – Eddy

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