2012-01-04 35 views
7

Tôi muốn sử dụng maven để thay thế một số tệp * .properties của tôi trong tệp chiến tranh của tôi.Tài nguyên Maven Không sao chép tệp

Vì vậy, tôi đã tạo thư mục dev, test và prod trong thư mục tài nguyên của mình. Bây giờ tôi chỉ muốn có một trong các thư mục được sử dụng trong đường dẫn thư mục tài nguyên trong tệp chiến tranh của tôi khi thực hiện cấu hình tương ứng. Kết quả là maven đang sao chép tất cả các thư mục khác cũng như vậy những người được tăng gấp đôi trong classpath. Đây là cấu hình của tôi:

<profile> 
     <id>dev</id> 

     <activation> 
      <activeByDefault>true</activeByDefault> 
     </activation> 

     <build> 
      <plugins> 
       <plugin> 
        <artifactId>maven-resources-plugin</artifactId> 
        <version>2.3</version> 
        <executions> 
         <execution> 
          <id>copy-dev-resources</id> 
          <phase>process-resources</phase> 
          <goals> 
           <goal>copy-resources</goal> 
          </goals> 
          <configuration> 

           <overwrite>true</overwrite> 

           <outputDirectory>${basedir}/target/classes</outputDirectory> 
           <resources> 
            <resource> 
             <!-- source --> 
             <directory>src/main/resources/dev</directory> 
            </resource> 
           </resources> 
          </configuration> 
         </execution> 
        </executions> 
       </plugin> 
      </plugins> 
     </build> 
    </profile> 

Làm cách nào để cấu hình Maven bây giờ chỉ sao chép nội dung của thư mục src/main/resources/dev vào mục tiêu/lớp?

Cám ơn các bạn giúp

Trả lời

7

Maven bởi bản mặc định tất cả các file trong "src/main/tài nguyên" vào thư mục đầu ra, vì vậy trong cấu hình hiện tại của bạn nó có lẽ sẽ tạo ra "dev", "thử nghiệm" và " prod "các thư mục có nội dung của chúng và sau đó sao chép thêm các tài nguyên phát triển mà không cần tiền tố" dev ".

Tôi khuyên bạn nên rời khỏi thư mục tài nguyên mặc định như hiện tại và chỉ sử dụng nó cho các tài nguyên độc lập với hồ sơ. Trong hồ sơ của bạn thì bạn có thể cấu hình thêm các thư mục tài nguyên:

<profile> 
    <id>dev</id> 
    <build> 
     <resources> 
      <resource> 
       <directory>${basedir}/src/main/resources-dev</directory> 
      </resource> 
     </resources> 
    </build> 
</profile> 

Nó cũng nên có thể cấu hình này trong chung xây dựng phần sử dụng tài sản quy định tại các cấu hình:

<build> 
    <resources> 
     <resource> 
      <directory>${basedir}/src/main/resources-${projectStage}</directory> 
     </resource> 
    </resources> 
</build> 
<profiles> 
    <profile> 
     <id>dev</id> 
     <properties> 
      <projectStage>dev</projectStage> 
     </properties> 
    </profile> 
</profiles> 

Nếu bạn vì một lý do không thể thay đổi cấu trúc thư mục hiện tại của bạn, bạn sẽ phải định cấu hình loại trừ cho thư mục tài nguyên mặc định để không sao chép thư mục phụ thuộc vào hồ sơ lồng nhau:

<build> 
     <resources> 
      <resource> 
       <directory>${basedir}/src/main/resources</directory> 
       <excludes> 
        <exclude>dev/**</exclude> 
        <exclude>test/**</exclude> 
        <exclude>prod/**</exclude> 
       </excludes> 
      </resource> 
     </resources> 
    </build> 
1

Phần "chính" trong cấu trúc thư mục maven tồn tại cho mục đích này. Thay vì tạo thư mục bên trong thư mục tài nguyên, bạn nên tạo nhiều thư mục hơn trong thư mục src của mình. Đây là hành vi mặc định, và nó đã được thực hiện bằng cách cho phép các tài nguyên kiểm tra ghi đè các tài nguyên chính trong các giai đoạn thử nghiệm của vòng đời của maven.

cấu trúc của bạn sẽ trông như thế này:

src 
    main 
    resources 
     a.properties 
     b.properties 
     c.properties 
    test 
    resources 
     b.properties 
     c.properties 
    dev 
    resources 
     b.properties 

Với cấu trúc này, "chính" mục tiêu của bạn sẽ có các tập tin bất động sản mặc định, các giai đoạn thử nghiệm sẽ tạm thời ghi đè b và c, và hồ sơ cá nhân dev sẽ chỉ ghi đè b bằng một phiên bản tùy chỉnh khác, trong phiên bản cuối cùng có thể triển khai.

Để đạt được điều này, bạn phải định cấu hình maven-resources-plugin cách bạn đã thực hiện trong câu hỏi của chúng tôi, cho hồ sơ nhà phát triển.

Và khi bạn thực hiện, hãy cân nhắc: bạn nên sử dụng phiên bản tệp thuộc tính nào khi chạy thử nghiệm đơn vị trong khi xây dựng bằng cấu hình dev?

0

Tôi đã sử dụng các tập tin assembly.xml trong maven và sử dụng bộ mã này để đảm bảo rằng tập tin nguồn của tôi là ở thư mục gốc của ứng dụng ...

<assembly xmlns="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.2" 
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
     xsi:schemaLocation="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.2 http://maven.apache.org/xsd/assembly-1.1.2.xsd"> 

<id>distribution</id> 
<formats> 
    <format>tar.gz</format> 
</formats> 
<fileSets> 
    <fileSet> 
     <directory>${basedir}</directory> 
     <includes> 
      <include>bin/**</include> 
      <include>webapps/**</include> 
      <include>data/**</include> 
     </includes> 
    </fileSet> 
    <fileSet> 
     <directory>${basedir}/target</directory> 
     <includes> 
      <include>*.jar</include> 
     </includes> 
     <outputDirectory>lib</outputDirectory> 
    </fileSet> 
    <fileSet> 
     <directory>${basedir}/src/main/</directory> 
     <includes> 
      <include>resources/**</include> 
     </includes> 
     <outputDirectory>/</outputDirectory> 
    </fileSet> 
</fileSets> 

<dependencySets> 
    <dependencySet> 
     <outputDirectory>lib</outputDirectory> 
     <useProjectArtifact>false</useProjectArtifact> 
    </dependencySet> 
</dependencySets> 

    </assembly> 

Không biết nếu đây là cách tốt nhất, nhưng đó là cách tôi có thể hình dung.

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