2014-06-13 32 views
15

Mam projekt z wieloma modułami. Aspekt jest obecnie dodawany do projektu "core". Kiedy robisz mvn clean install tutaj, to działa. Jednak staramy się zrobić mvn clean install nad projektem dominującej nie jest on z tego błędu podczas kompilacji jedną z innymi projektami:Błąd podczas kompilacji podczas korzystania z kompilatora AspectJ zamiast Javac

Typ org.hibernate.annotations.CacheConcurrencyStrategy nie może zostać rozwiązany. To jest pośrednio odwołuje się od wymaganych plików .class

Jeśli dodać rdzenia zależność hibernacji w tym projekcie też to działa, ale dodanie zależności do projektów, które nie powinny mieć zależność nie ma sensu - więc nie jest rozwiązanie. Podczas kompilacji z javac działa dobrze.

Jaki jest tego powód? I jak mogę to naprawić, aby móc używać kompilatora AspectJ bez przeciekania zależności do projektów, które nie powinny tego robić?

mam tę konfigurację w POM nadrzędny:

<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> 

Aktualizacja

Właśnie się dowiedziałem. Uruchamianie mvn clean install kończy się niepowodzeniem za każdym razem. Jednak jednorazowe uruchomienie mvn [clean] install kończy się niepowodzeniem. Następnie działa mvn install bez clean działa. Widzę, że builddef.lst w folderze docelowym jest powodem, dla którego działa i kończy się niepowodzeniem w zależności od tego, czy uruchomisz czyszczenie. Teraz moje pytanie brzmi: w jaki sposób automatycznie generujesz ten plik?

nadrzędna 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

Co to jest stacktrace wyjątku i jak wygląda twój aspekt? – SpaceTrucker

+0

@KnightRider powinieneś zaktualizować swoje Pytanie zamiast dodawać komentarze. –

+0

@ LeonardBrünings Zrobione. –

Odpowiedz

3

Włącz debugowanie na pw maven kopać głębiej. Powinieneś zauważyć, że kompilacja aspectj jest wywoływana tylko podczas pierwszej inwokacji maven. Ponieważ plik builddef.lst już istnieje po pierwszym wywołaniu, wywołanie bez czyszczenia pomija kompilację aspectj.

Ten AspectJ skompilować plugin zachowanie zaobserwowano wcześniej i został opisany tutaj:

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

Trzeba spojrzeć głębiej do rozwiązania podstawowego problemu, ale jako jeden komentator już zasugerował, kompilator AspectJ powinien być włączony tylko w modułach, które tego wymagają.

W przeciwnym razie dodatkowe zależności są wymagane do kompilacji aspectj, jak już zauważyłeś. Włączyłem komponent aspectj do mojej pracy bez problemu, ograniczając go tylko do modułów, które tego wymagają.

3

Zgodnie z AspectJ compiler Maven plugin można ustawić argumentFileName, aby zlokalizować istniejący builddef.lst.

Możesz więc wygenerować numer builddef.lst i skopiować go do swojego folderu z zasobami, i polecić wtyczce AspectJ Maven, aby używał tego pliku.

Powiązane problemy