2013-12-20 10 views
11

Ich möchte mein Projekt auf spring 4 aufrüsten, jedoch bekomme ich eine fehlende Abhängigkeit für aspectweaver-1.8.0.M1.jar. Wenn ich einen Blick auf die Abhängigkeitshierarchie nehmen, sehe ich, dass diese Datei durch feder Aspekte-4.0.0 benötigt, dieEine Abhängigkeit von spring-aspects-4 kann nicht gefunden werden

<dependency> 
    <groupId>org.aspectj</groupId> 
    <artifactId>aspectjweaver</artifactId> 
    <version>1.8.0.M1</version> 
    <scope>compile</scope> 
</dependency> 

Nach Überprüfung Maven-Repository die folgenden in seiner eigenen pom.xml hat, ich wasn Dieses Artefakt kann nicht gefunden werden, da die neueste stabile Version von aspectweaver 1.7.4 ist.

Jetzt kann ich nicht zwei Dinge verstehen:

  1. Da der Umfang dieser Abhängigkeit ist zu kompilieren warum meine Bewerbung es brauchen? Ich möchte die Frühjahrsaspekte nicht zusammenstellen.jar !!

  2. Warum ist feder Aspekte-4.0.0.jar (die ist stabil) mit einem nicht stabilen Version einer Komponente? Wäre das nicht Frühling-Aspekte-4.0.0 auch nicht-stabil?

Dank

+2

Möglicherweise müssen Sie das entsprechende Meilenstein-Repository hinzufügen; Ich weiß nicht, welche es ist. Gute Fragen über die Abhängigkeit von "Frühjahrsaspekten", und ich würde einen Fehler dagegen einreichen. – chrylis

+0

Ich habe nochmal die Abhängigkeiten von Spring-Aspekten überprüft und konnte keine Meilenstein-Repositories finden! Von wo lädt es den aspectjweaver 1.8.0.M1 herunter? – Serafeim

+0

Es scheint, dass in der Abhängigkeitsverwaltung Gradle verwendet. In der Datei https://github.com/spring-projects/spring-framework/blob/v4.0.0.RELEASE/build.gradle kann ich sehen, dass '' ext.aspectjVersion = "1.8.0.M1" ''. – Serafeim

Antwort

8

Nach a reported issue at springsource ist aspectjweaver "im Grunde identisch mit AspectJ 1.7", außer dass es eine frühzeitige Unterstützung für Java 8.

Wie ich, Java 8 Unterstützung brauchen nicht hat I grundsätzlich gegeben, um eine Kompilierung Abhängigkeit auf die neueste Version von aspectweaver:

<dependency> 
    <groupId>org.aspectj</groupId> 
    <artifactId>aspectjweaver</artifactId> 
    <version>1.7.4</version> 
</dependency> 

Dies stellt sicher, dass die 1.7.4 anstelle der Meilenstein-Release verwendet wird, und ist eine akzeptable Problemumgehung für mich vorläufig.

+0

Können Sie auch auf meine Frage 1 antworten: "Da der Umfang dieser Abhängigkeit kompiliert wird, warum benötigt meine Anwendung sie?" Auch in der Quelle der Quellen heißt es: "Wenn das noch eine Weile dauert, müssen wir vielleicht offiziell dokumentieren, wie wir diese Abhängigkeit durch AspectJ 1.7 ersetzen können". Könnten Sie das auch in Ihre Antwort aufnehmen (ersetzen Sie die Abhängigkeit von 1.8.0.M1 durch 1.7.4 für aspectjweaver)? – Serafeim

+1

Eine Abhängigkeit mit dem Bereich "kompilieren" bedeutet nicht, dass Sie sie tatsächlich kompilieren. Es bedeutet nur, dass das Artefakt für das Kompilieren Ihres Projekts benötigt wird. Es ist auch in der Kriegsdatei enthalten, wenn Sie ein "mvn-Paket" machen. Der Kompilierbereich ist übrigens der Standardbereich. – reidarok

6

die aspectjweaver Abhängigkeit zu beheben, fügen Sie diese Repository:

<repository> 
    <id>spring-milestones</id> 
    <url>http://repo.spring.io/milestone</url> 
    <snapshots> 
     <enabled>true</enabled> 
    </snapshots> 
</repository> 

Dies wird Ihnen 1.8.0.M1 von aspectjrt, aspectjweaver und aspectjtools auf Version zuzugreifen.

jedoch Version 1.6 des aspectj-Maven-Plugin nicht unterstützt Java 8.

Doch feder Aspekte-4.0.0 hat eine Abhängigkeit von aspectjweaver 1.8.0.M1 für Java 8-Unterstützung.

Wenn Sie mit Spring 3.2.6 und Java 7, die aspectj-Maven-Plugin Config funktioniert:

 <plugin> 
      <groupId>org.codehaus.mojo</groupId> 
      <artifactId>aspectj-maven-plugin</artifactId> 
      <version>1.6</version> 
      <configuration> 
       <source>1.7</source> 
       <target>1.7</target> 
       <complianceLevel>1.7</complianceLevel> 
       <aspectLibraries> 
        <aspectLibrary> 
         <groupId>org.springframework</groupId> 
         <artifactId>spring-aspects</artifactId> 
        </aspectLibrary> 
       </aspectLibraries> 
       <showWeaveInfo>true</showWeaveInfo> 
      </configuration> 
      <executions> 
       <execution> 
        <goals> 
         <goal>compile</goal> 
         <goal>test-compile</goal> 
        </goals> 
       </execution> 
      </executions> 
     </plugin> 

Sie könnten in der Lage sein, einen Ausschlusses auf aspectjweaver 1.8.0.M1 innerhalb der einfügen spring-aspects 4.0.0 Abhängigkeit. Dadurch können Sie Spring 4 mit Java 7 und allen Abhängigkeiten von 1.7.4 aspectj * verwenden.

In dem Bemühen, Kompilierung-Weberei (CTW) in einem Frühling anwenden 4/Java 8 Projekt, ich auf die folgenden Beiträge kamen:

  1. Maven, Scala, Spring, AspectJ

  2. https://weblogs.java.net/blog/fabriziogiudici/archive/2011/07/19/making-lombok-aspectj-and-maven-co-exist

Und hier ist meine Lösung: https://github.com/javawerks/homeschool/blob/master/pom.xml

Es funktioniert! Beachten Sie, dass diese Lösung die Version 1.8.0.M1 der 3 aspectj * -Amigos verwendet, die hier zu finden ist: http://repo.spring.io/milestone/org/aspectj/

Warnung: Wenn Ihr lokales Maven-Repository noch nicht die Abhängigkeiten von maven-antrun-plugin hat, werden Sie das tun bekomme "nicht finden * Abhängigkeit in maven central" -Fehler. Kopieren Sie die Abhängigkeiten zu Ihrem Haupt-Abhängigkeiten-Element, um dieses Problem zu beheben; mvn sauber kompilieren; entferne kopierte Abhängigkeiten; und maven-antrun-plugin sollte die aspectj * Abhängigkeiten finden. Führen Sie dann 'mvn clean install' aus und überprüfen Sie die AJC-Protokollierung.

schließlich in IntelliJ werden Sie sehen, ein 'können Symbol nicht lösen' Fehler für dieses iajc Attribut:

aspectPath="${org.springframework:spring-aspects:jar}" 

Keine Sorge, es wie erwartet funktioniert. Es ist eine Maven-Antrun-Plugin Namenskonvention.

Irgendwann wird das aspectj-maven-plugin aktualisiert, um Java 8 zu unterstützen, und dann können wir zur Normalität zurückkehren. Das heißt, das showWeaveInfo = "true" Logging ist viel schöner.

Hoffe, das hilft. Wie so viele vor mir, brauchte es viel Bier, um dieses herauszufinden;)

+0

+1 Dies ist eine sehr detaillierte Erklärung. Wenn Sie Zeit haben, können Sie ein Beispiel hinzufügen, um die folgende Aussage zu unterstützen. _ "Möglicherweise können Sie einen Ausschluss auf aspectjweaver 1.8.0.M1 innerhalb der Abhängigkeit spring-aspects 4.0.0 einfügen. Dadurch können Sie möglicherweise Spring 4 mit Java 7 und allen 1.7.4 aspectj * -Abhängigkeiten verwenden. "_ –

+0

FWIW, Ich habe die pom.xml aktualisiert, um die neueste Version von Spring und Aspectj zu reflektieren. Das aspectj-maven-plugin wurde noch nicht für Java 8 aktualisiert. – javawerks

+0

Die pom.xml enthält detaillierte Kommentare zum Originalbeitrag, um die Dinge hoffentlich etwas übersichtlicher zu gestalten. – javawerks

Verwandte Themen