2011-09-23 31 views
7

Tôi có một dự án maven nơi tôi đang xây dựng một tập tin chiến tranh, nhưng tôi cũng đang sử dụng maven-jar-plugin để xây dựng một cái lọ trong cùng một dự án.maven xây dựng với chiến tranh và lọ đẩy đồ vật lạ để repo nội

--DISCLAIMER-- Tôi biết đây không phải là cách chính xác để thực hiện việc này, nhưng có một số vấn đề khác xảy ra khi chia thành dự án jar và dự án chiến tranh riêng biệt với một số plugin của bên thứ ba.

Tôi thấy một số hành vi lạ với điều này. Dưới đây là cấu trúc dự án của tôi.

warproject 
-src 
--main 
---webapp 
----WEB-INF 
-----web.xml 
---java 
----com.test.myclass 
-----test.java 
-pom.xml 

Khi tôi xây dựng dự án này, tôi có được chiến tranh và tệp jar chính xác trong thư mục đích của mình, tuy nhiên trong trường hợp địa phương. Tệp chiến tranh được cài đặt có tên là war-jar-0.0.1-SNAPSHOT.war, tuy nhiên nội dung của tệp này là nội dung của tệp jar của tôi. Điều này cũng xảy ra nếu tôi làm ngược lại. tức là nếu tôi thiết lập dự án của mình để tạo bình và sử dụng plugin maven-war để xây dựng chiến tranh, lưu trữ trong thư mục đích của tôi là chính xác, nhưng repo cục bộ của tôi có tệp jar với nội dung của tệp chiến tranh của tôi. Dưới đây là tệp pom tôi đang sử dụng.

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 
    <modelVersion>4.0.0</modelVersion> 
    <groupId>com.test</groupId> 
    <artifactId>war-jar</artifactId> 
    <version>0.0.1-SNAPSHOT</version> 
    <packaging>war</packaging> 
<build> 
     <plugins> 
      <plugin> 
       <groupId>org.apache.maven.plugins</groupId> 
       <artifactId>maven-jar-plugin</artifactId> 
       <configuration> 
        <jarName>${project.artifactId}-${project.version}-client</jarName> 
       </configuration> 
       <executions> 
        <execution> 
         <id>make-a-jar</id> 
         <phase>package</phase> 
         <goals> 
          <goal>jar</goal> 
         </goals> 
        </execution> 
       </executions> 
      </plugin> 
     </plugins> 
     <resources> 
      <resource> 
       <directory>src/main/java</directory> 
      </resource> 
      <resource> 
       <directory>src/main/resources</directory> 
      </resource> 
     </resources> 
    </build> 

</project> 

Đầu ra bàn điều khiển cho điều này như sau, nó cho thấy rằng bình đang được tải lên như chiến tranh.

Installing /home/me/work/src/war-jar/target/war-jar-0.0.1-SNAPSHOT.jar to /home/me/.m2/repository/com/test/war-jar/0.0.1-SNAPSHOT/war-jar-0.0.1-SNAPSHOT.war 

--UPDATE tôi đã làm việc này, nhưng tôi đã phải thay đổi giai đoạn thực hiện 'make-một-jar' của tôi để cài đặt từ gói. Điều này làm việc tốt và các hiện vật chính xác được tải lên, nhưng tôi vẫn còn bối rối là tại sao điều này tạo nên sự khác biệt. Rõ ràng là tạo tác được tạo ra ở một giai đoạn vòng đời khác nhau, và do đó không phải là xung quanh tại thời điểm cài đặt ban đầu cho dự án, do đó các tập tin sai không được tải lên. Điều này có vẻ như một 'hack' và tôi muốn hiểu tại sao điều này là hành xử theo cách này.

+0

lệnh bạn sử dụng để tạo bình/chiến tranh là gì? mvn cài đặt? –

+0

Có mvn cài đặt trên dự án. – broschb

Trả lời

4

Tôi trả lời các câu hỏi của riêng mình vì tôi không nhận được bất kỳ thông tin nào giúp tôi tìm giải pháp của mình. Xem bản cập nhật của tôi về câu hỏi ban đầu của tôi cho giải pháp của tôi.

2

Bạn cần chỉ định cấu hình cho plugin maven-install-plugin để đạt được điều này. Thêm cấu hình plugin sau dưới <build>.

 <plugin> 
      <groupId>org.apache.maven.plugins</groupId> 
      <artifactId>maven-install-plugin</artifactId> 
      <executions> 
       <execution> 
        <phase>install</phase> 
        <goals> 
         <goal>install-file</goal> 
        </goals> 
        <configuration> 
         <packaging>jar</packaging> 
         <artifactId>${project.artifactId}</artifactId> 
         <groupId>${project.groupId}</groupId> 
         <version>${project.version}</version> 
         <file> 
          ${project.build.directory}/${project.artifactId}-${project.version}.jar 
         </file> 
        </configuration> 
       </execution> 
      </executions> 
     </plugin> 
+0

Đây không phải là khá. Điều này sẽ cài đặt jar của tôi vào repo. Tôi đã có điều này nhưng loại bỏ nó để làm cho ví dụ của tôi càng đơn giản càng tốt. Tôi có thể lấy cả cái bình và chiến tranh cho repo, vấn đề là tập tin chiến tranh của tôi chứa đựng những nội dung cần có trong tập tin jar. Tôi đã cập nhật câu hỏi ban đầu của mình với đầu ra giao diện điều khiển mô tả điều này. – broschb

4

này cũng làm việc,

<plugin> 
    <groupId>org.apache.maven.plugins</groupId> 
    <artifactId>maven-war-plugin</artifactId> 
    <executions> 
    <execution> 
     <!-- 
     When also running maven-jar-plugin correct maven-war-plugin's ID 
     from "default-war" to "default-jar" 
     --> 
     <id>default-jar</id> 
     <phase>package</phase> 
     <goals><goal>war</goal></goals> 
     <configuration> 
     ... 
     </configuration> 
    </execution> 
    </executions> 
</plugin> 

Tham khảo http://maven.apache.org/guides/mini/guide-default-execution-ids.html

Để tìm hiểu xem tại sao dự án của bạn cư xử như là, phân tích hiệu quả POM.

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