2014-06-13 27 views
15

Tôi có một dự án đa mô-đun. Khía cạnh hiện đang được thêm vào dự án "cốt lõi". Khi làm một mvn clean install ở đây nó hoạt động. Tuy nhiên cố gắng để làm một mvn clean install về dự án mẹ nó thất bại với lỗi này khi biên dịch một trong những dự án khác:Lỗi khi biên dịch khi sử dụng trình biên dịch AspectJ thay vì Javac

Loại org.hibernate.annotations.CacheConcurrencyStrategy không thể được giải quyết. Nó được tham chiếu gián tiếp từ các tệp được yêu cầu. Các tệp lớp học

Nếu tôi thêm phụ thuộc vào Hibernate vào dự án đó thì nó hoạt động, nhưng thêm phụ thuộc vào các dự án không nên phụ thuộc không có ý nghĩa - vì vậy nó không phải là một giải pháp. Khi biên dịch với javac nó hoạt động tốt.

Lý do là gì? Và làm thế nào tôi có thể sửa chữa nó để tôi có thể sử dụng trình biên dịch AspectJ mà không bị rò rỉ phụ thuộc vào các dự án mà không nên có điều đó?

tôi có cấu hình này trong POM mẹ:

<build> 
    <plugins> 
     <plugin> 
      <groupId>org.codehaus.mojo</groupId> 
      <artifactId>aspectj-maven-plugin</artifactId> 
      <version>1.5</version> 
      <configuration> 
       <source>1.6</source> 
       <target>1.6</target> 
       <complianceLevel>1.6</complianceLevel> 
      </configuration> 
      <executions> 
       <execution> 
        <goals> 
         <goal>compile</goal> 
        </goals> 
       </execution> 
      </executions> 
     </plugin> 
    </plugins> 
</build> 

Cập nhật

Tôi vừa phát hiện ra. Chạy mvn clean install không thành công. Tuy nhiên, chạy mvn [clean] install một lần không thành công. Sau đó chạy mvn install mà không cần clean hoạt động. Tôi thấy rằng builddef.lst trong thư mục đích là lý do tại sao nó hoạt động và không thành công dựa trên việc bạn có chạy sạch hay không. Vì vậy, bây giờ câu hỏi của tôi là: Làm cách nào để bạn tự động tạo tệp này?

Chánh POM-file:

<?xml version="1.0" encoding="UTF-8"?> 
<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/maven-v4_0_0.xsd"> 

    <modelVersion>4.0.0</modelVersion> 
    <groupId>com.mycompany</groupId> 
    <artifactId>core-lib</artifactId> 
    <name>core-lib</name> 
    <packaging>pom</packaging> 

    <build> 
     <plugins> 
      <plugin> 
       <groupId>org.codehaus.mojo</groupId> 
       <artifactId>aspectj-maven-plugin</artifactId> 
       <version>1.5</version> 
       <configuration> 
        <source>1.6</source> 
        <target>1.6</target> 
        <complianceLevel>1.6</complianceLevel> 
       </configuration> 
       <executions> 
        <execution> 
         <goals> 
          <goal>compile</goal> 
         </goals> 
        </execution> 
       </executions> 
      </plugin> 
     </plugins> 
    </build> 

    <dependencies> 
     <dependency> 
      <groupId>org.aspectj</groupId> 
      <artifactId>aspectjrt</artifactId> 
      <version>1.7.4</version> 
     </dependency> 
    </dependencies> 

    <modules> 
     <module>core-xyz</module> 
     <module>core-xyz2</module> 
    </modules> 
</project> 
+0

Stacktrace của ngoại lệ là gì và khía cạnh của bạn trông như thế nào? – SpaceTrucker

+0

@KnightRider bạn nên cập nhật Câu hỏi của mình thay vì thêm nhận xét. –

+0

@ LeonardBrünings Xong. –

Trả lời

3

Enable debug trên gọi maven để đào sâu hơn. Bạn nên quan sát rằng biên dịch aspectj chỉ được gọi trong lời gọi maven đầu tiên với lệnh clean. Kể từ khi builddef.lst đã tồn tại sau lời gọi đầu tiên, hãy gọi mà không làm sạch bỏ qua biên dịch aspectj.

AspectJ này biên dịch hành vi plugin đã được quan sát trước đó và được mô tả ở đây:

http://out-println.blogspot.com/2007/08/compile-time-checks-with-aspectj-part-2.html?m=1

Bạn sẽ cần phải nhìn sâu hơn để giải quyết các vấn đề cơ bản, nhưng như một commenter đã đề nghị, trình biên dịch AspectJ chỉ nên được bật trong các mô-đun yêu cầu.

Nếu không, phụ thuộc bổ sung là bắt buộc để biên dịch aspectj, như bạn đã quan sát. Tôi đã kết hợp phần biên dịch vào công việc của riêng mình mà không có vấn đề bằng cách giới hạn nó chỉ với các mô-đun yêu cầu nó.

3

Theo số AspectJ compiler Maven plugin bạn có thể thiết lập argumentFileName để tìm số builddef.lst hiện có.

Vì vậy, bạn có thể tạo builddef.lst và sao chép nó vào thư mục tài nguyên của mình và hướng dẫn plugin AspectJ Maven sử dụng tệp đó.

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