java - que - mvn clean package
Al agregar AspectJ a pom.xml, se modificó la versión de Java con Maven, ¿por qué? (5)
Creo que el problema está en la configuración predeterminada de source , target y complianceLevel del aspectj-maven-plugin (según la documentación vinculada previamente, 1.4, 1.2 y 1.4, respectivamente). Debe establecer estos explícitamente en su pom padre:
<build>
<plugins>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>aspectj-maven-plugin</artifactId>
<version>1.5</version>
<!-- new configuration is here -->
<configuration>
<complianceLevel>1.6</complianceLevel>
<source>1.6</source>
<target>1.6</target>
</configuration>
<executions>
<execution>
<goals>
<goal>compile</goal>
<goal>test-compile</goal>
</goals>
</execution>
</executions>
</plugin>
...
</plugins>
<build>
ACTUALIZACIÓN: aquí está mi configuración maven-compiler-plugin:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>2.3.2</version>
<configuration>
<source>1.6</source>
<target>1.6</target>
</configuration>
Trabajo en una aplicación multiproyecto que construyo con Maven. Decidimos agregar AspectJ, así que agregué el siguiente código a pom.xml
en el proyecto de nivel superior: (de la documentación oficial)
<project>
...
<dependencies>
...
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjrt</artifactId>
<version>1.7.3</version>
</dependency>
...
</dependencies>
...
<build>
<plugins>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>aspectj-maven-plugin</artifactId>
<version>1.5</version>
<executions>
<execution>
<goals>
<goal>compile</goal> <!-- use this goal to weave all your main classes -->
<goal>test-compile</goal> <!-- use this goal to weave all your test classes -->
</goals>
</execution>
</executions>
</plugin>
...
</plugins>
<build>
...
</project>
y los siguientes fragmentos a cada proyecto subordinado:
</project>
...
<build>
....
<plugins>
...
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>aspectj-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
<dependencies>
...
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjrt</artifactId>
</dependency>
....
</dependencies>
...
</project>
De alguna manera, esta modificación ha anulado la versión de Java que uso. Si ejecuto build, obtengo varios errores como este:
Error de sintaxis, las anotaciones solo están disponibles si el nivel de fuente es 1.5 o mayor
Eso me da la sospecha de que mi versión de Java (originalmente 1.6) de alguna manera se revirtió a 1.4. No hice nada, al menos no a sabiendas, que pudiera influir en la versión de Java, por lo que sospecho que el código relacionado con AspectJ mencionado anteriormente es responsable del cambio.
Mi pregunta es cómo puede AspectJ cambiar la versión de Java y qué debo hacer para solucionar este problema. ¿O malinterpreto algo por completo y estoy en el camino equivocado?
Si no tiene definida la versión, el complemento del compilador supone que su fuente de Java se ajusta a Java 1.3 y que está apuntando a una Java 1.1 JVM.
Tal vez, deberías definirlo:
http://maven.apache.org/plugins/maven-compiler-plugin/examples/set-compiler-source-and-target.html
estaba perdido
<complianceLevel>${java.level}</complianceLevel>
en mi pom.xml
Puede encontrar las últimas versiones de dependencia y complemento para aspectj .
Me faltaba la versión de Java con la versión jdk en la parte superior de mis propiedades pom.
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>aspectj-maven-plugin</artifactId>
<version>1.2</version> <!-- 1.5 dint work for me -->
<dependencies>
<!-- You must use Maven 2.0.9 or above or these are ignored (see MNG-2972) -->
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjrt</artifactId>
<version>${aspectj.version}</version>
</dependency>
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjtools</artifactId>
<version>${aspectj.version}</version>
</dependency>
</dependencies>
<executions>
<execution>
<phase>process-sources</phase> <!-- or any phase before compile -->
<goals>
<goal>compile</goal>
<goal>test-compile</goal>
</goals>
</execution>
</executions>
<configuration>
<outxml>true</outxml>
<source>${jdk.version}</source> <!-- I was missing this -->
<target>${jdk.version}</target> <!-- jdk.version property -->
</configuration>
</plugin>
y en la parte superior de mi pom.xml había establecido la propiedad jdk.version como,
<properties>
<jdk.version>1.7</jdk.version>
</properties>