2011-12-19 41 views
6

Gần đây tôi đã chuyển đổi ứng dụng web GWT của mình (GWT 2.4.0) thành dự án maven.
Tôi đang sử dụng maven 2.2.1, gwt-maven plugin (2.4.0), Eclipse Indigo (3.7) và plugin m2eclipse.Trình xây dựng dự án Maven được gọi mỗi khi tôi thay đổi tệp nguồn (GWT)

Các phụ thuộc và cấu hình chung có vẻ ổn khi biên dịch web-ứng dụng mà không gặp bất kỳ sự cố nào và cũng hoạt động ở chế độ sản xuất.
Điều tương tự cũng áp dụng cho chế độ được lưu trữ.

Tuy nhiên tôi có một hành vi lạ: Khi tôi thay đổi một dòng trong tệp nguồn Java/GWT, yêu cầu Maven Project Builder và các bước này mất nhiều thời gian (khoảng 10 giây) và nhật thực đôi khi trở nên không sử dụng được trong thời gian này.

Đây có phải là hành vi bình thường của m2eclipse không?

Và nếu có, có cách nào để tăng tốc độ không?

Lưu ý: Tôi phải định cấu hình plugin vòng đời cho m2eclipse. Đây là phần quan trọng của tập tin pom:

<build> 
     <!-- Generate compiled stuff in the folder used for developing mode --> 
     <outputDirectory>${webappDirectory}/WEB-INF/classes</outputDirectory> 

     <plugins> 

      <!-- GWT Maven Plugin --> 
      <plugin> 
       <groupId>org.codehaus.mojo</groupId> 
       <artifactId>gwt-maven-plugin</artifactId> 
       <version>2.4.0</version> 
       <executions> 
        <execution> 
         <goals> 
          <goal>compile</goal> 
          <goal>test</goal> 
         </goals> 
        </execution> 
       </executions> 
       <!-- Plugin configuration. There are many available options, see gwt-maven-plugin 
        documentation at codehaus.org --> 
       <configuration> 
        <runTarget>index.html</runTarget> 
        <hostedWebapp>${webappDirectory}</hostedWebapp> 
        <i18nMessagesBundle>com.gmi.nordborglab.testapp.client.Messages</i18nMessagesBundle> 
       </configuration> 
      </plugin> 

      <!-- Copy static web files before executing gwt:run --> 
      <plugin> 
       <groupId>org.apache.maven.plugins</groupId> 
       <artifactId>maven-war-plugin</artifactId> 
       <version>2.1.1</version> 
       <executions> 
        <execution> 
         <phase>compile</phase> 
         <goals> 
          <goal>exploded</goal> 
         </goals> 
        </execution> 
       </executions> 
       <configuration> 
        <webappDirectory>${webappDirectory}</webappDirectory> 
       </configuration> 
      </plugin> 
     </plugins> 

     <pluginManagement> 
      <plugins> 
       <plugin> 
        <groupId>org.eclipse.m2e</groupId> 
        <artifactId>lifecycle-mapping</artifactId> 
        <version>1.0.0</version> 
        <configuration> 
         <lifecycleMappingMetadata> 
          <pluginExecutions> 
           <pluginExecution> 
            <pluginExecutionFilter> 
             <groupId>org.codehaus.mojo</groupId> 
             <artifactId>gwt-maven-plugin</artifactId> 
             <versionRange>[2.4.0,)</versionRange> 
             <goals> 
              <goal>resources</goal> 
              <goal>compile</goal> 
             </goals> 
            </pluginExecutionFilter> 
            <action> 
             <execute /> 
            </action> 
           </pluginExecution> 
           <pluginExecution> 
            <pluginExecutionFilter> 
             <groupId>org.apache.maven.plugins</groupId> 
             <artifactId>maven-war-plugin</artifactId> 
             <versionRange>[2.1.1,)</versionRange> 
             <goals> 
              <goal>exploded</goal> 
             </goals> 
            </pluginExecutionFilter> 
            <action> 
             <execute /> 
            </action> 
           </pluginExecution> 

          </pluginExecutions> 
         </lifecycleMappingMetadata> 
        </configuration> 
       </plugin> 
      </plugins> 
     </pluginManagement> 

    </build> 

Trả lời

13

Điều này minh họa hoàn toàn lý do tại sao m2e không cho phép bất kỳ plugin "không xác định" nào chạy trên bản dựng gia tăng theo mặc định (http://wiki.eclipse.org/M2E_plugin_execution_not_covered#Background). Hầu hết các trình bổ sung maven không phù hợp cho việc xây dựng gia tăng và thực hiện xây dựng hoàn chỉnh bất cứ khi nào chúng được triệu gọi (và như một phần thưởng, bạn có thể bị rò rỉ bộ nạp lớp).

Trong phần quản lý plugin của bạn, bạn đã chỉ định rằng gwt: resources, gwt: compile and war: phát nổ phải được thực thi. Theo mặc định, chúng được thực hiện trên các bản dựng gia tăng, điều đó có nghĩa là trên mọi thay đổi tài nguyên. Vì các mục tiêu/plugin này không được tối ưu hóa cho một bản dựng gia tăng, nên chúng mất một thời gian để hoàn thành.

Nếu bạn muốn điều tốc độ lên, bạn có thể nói M2E để thực hiện chúng chỉ trên Full xây dựng (tức là sau khi một dự án sạch) bằng cách sử dụng

<execute> 
    <runOnIncremental>false</runOnIncremental> 
</execute> 

Sau đó, tay làm một nhật thực toàn phần xây dựng sạch sẽ tự động kích hoạt thực hiện của họ. Hãy lưu ý rằng đôi khi JDT quyết định thúc đẩy các bản dựng gia tăng cho những người đầy đủ.

Tôi tin rằng (nhưng có thể sai) rằng, nếu bạn đang sử dụng Eclipse Plugin Google, bạn có thể bỏ qua gwt: nguồn lực và gwt: biên dịch hoàn toàn (bằng cách thay thế < thực hiện > với < bỏ qua >).

9

Lý do cho việc xây dựng Maven là nhiều hơn khả năng một kích hoạt Maven Project Builder (các thuộc tính dự án> Builders).

Bạn có thể tắt nó và - miễn là bạn đã chọn Trình tạo Java - Eclipse sẽ tiếp tục biên dịch các tệp đã chỉnh sửa.

+0

Đó là một ý tưởng thú vị. Làm thế nào để bạn kích hoạt xây dựng đầy đủ? Sử dụng pom.xml> Chạy dưới dạng? –

+0

@MartinKersten: Có, nếu tôi gọi lại Eclipse đúng cách. Tôi đã không sử dụng nó trong hơn 2 năm: -P –

3

Vâng, tôi thường bỏ chọn:

Dự án | Xây dựng Tự động

Tôi chỉ ghét việc biên dịch mọi lúc.

+3

Sức mạnh của Eclipse và Java bị phá hủy trong một Action :-). Tôi thích nhận mọi thứ được biên soạn mọi lúc và không thích mọi thứ không làm điều đó (như GWT). Nó buộc tôi phải viết một cái gì đó tương tự như GWT cho một dự án lớn, nơi nó đã được giá trị nó. Nó chỉ mất 2 tuần và đang làm công việc của nó hoàn hảo. –

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