Плагин AspectJ Maven не может скомпилировать мой проект
Я пытаюсь использовать плагин aspectj maven для компиляции проекта с компилятором aspectj, а затем пытаюсь упаковать классы в файл "war". К сожалению, он не работает со следующей конфигурацией (pom.XML-код):
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.17</version>
<configuration>
<skipTests>true</skipTests>
</configuration>
</plugin>
<plugin>
<groupId>com.liferay.maven.plugins</groupId>
<artifactId>liferay-maven-plugin</artifactId>
<version>${liferay.maven.plugin.version}</version>
<executions>
<execution>
<phase>generate-sources</phase>
</execution>
</executions>
<configuration>
<autoDeployDir>${liferay.auto.deploy.dir}</autoDeployDir>
<appServerDeployDir>${liferay.app.server.deploy.dir}</appServerDeployDir>
<appServerLibGlobalDir>${liferay.app.server.lib.global.dir}</appServerLibGlobalDir>
<appServerPortalDir>${liferay.app.server.portal.dir}</appServerPortalDir>
<liferayVersion>${liferay.version}</liferayVersion>
<pluginType>portlet</pluginType>
</configuration>
</plugin>
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<version>2.5</version>
<configuration>
<encoding>UTF-8</encoding>
<source>1.7</source>
<target>1.7</target>
<showWarnings>true</showWarnings>
<failOnError>true</failOnError>
</configuration>
</plugin>
<plugin>
<artifactId>maven-resources-plugin</artifactId>
<version>2.5</version>
<configuration>
<encoding>UTF-8</encoding>
</configuration>
</plugin>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>aspectj-maven-plugin</artifactId>
<version>1.7</version>
<configuration>
<source>1.7</source>
<target>1.7</target>
<compilationLevel>1.7</compilationLevel>
<encoding>UTF-8</encoding>
</configuration>
<executions>
<execution>
<phase>process-sources</phase>
<goals>
<goal>compile</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjrt</artifactId>
<version>1.7.4</version>
<type>jar</type>
</dependency>
после mvn clean install
Я вижу следующие исключения:
[INFO] --- aspectj-maven-plugin:1.7:compile (default) @ tvbs-portlet ---
[INFO] Showing AJC message detail for messages of types: [error, warning, fail]
[ERROR] Missing message: configure.incompatibleComplianceForSource in: org.aspectj.ajdt.ajc.messages
<unknown source file>:<no line information>
[ERROR] no sources specified
<unknown source file>:<no line information>
[ERROR] AspectJ Compiler 1.8.2
Usage: <options> <source file | @argfile>..
AspectJ-specific options:
-inpath <list> use classes in dirs and jars/zips in <list> as source
может ли кто-нибудь предложить мне какое-нибудь решение?
5 ответов
обновление: хотя то, что я сказал о конфигурации AspectJ Maven в этом ответе, все правильно, основная причина конкретной проблемы - плохое управление зависимостями Maven - описана в моем другого ответа. Было бы лучше, если бы это был приемлемый ответ, а не этот.
- подсказка пользователя codelion имеет смысл, пожалуйста, измените свой
<compilationLevel>
тег (опечатка?)- to<complianceLevel>
. - нет необходимости понижение до версии плагина 1.6, вы можете сохранить 1.7.
- также нет необходимости снова указывать конфигурацию в
<execution>
раздел, один на уровне плагина достаточно. - обратите внимание, что версия AspectJ по умолчанию в плагине 1.7-1.8.2, поэтому, возможно, ваша зависимость от времени выполнения 1.7.4 работает, но на вашем месте я бы обновил и ее, оптимально синхронизировав с версией плагина. Это не трудно, но я думаю, что это имеет смысл.
- может вы даже хотите обновить до текущей версии 1.8.4 с AspectJ, в плагине, а также во время выполнения. Это также может быть достигнуто путем добавления зависимости к желаемому aspectjtools версия для конфигурации плагина:
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<java.source-target.version>1.8</java.source-target.version>
<aspectj.version>1.8.4</aspectj.version>
</properties>
<build>
<pluginManagement>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>aspectj-maven-plugin</artifactId>
<version>1.7</version>
<configuration>
<showWeaveInfo>true</showWeaveInfo>
<source>${java.source-target.version}</source>
<target>${java.source-target.version}</target>
<Xlint>ignore</Xlint>
<complianceLevel>${java.source-target.version}</complianceLevel>
<encoding>UTF-8</encoding>
<verbose>true</verbose>
</configuration>
<executions>
<execution>
<!-- IMPORTANT -->
<phase>process-sources</phase>
<goals>
<goal>compile</goal>
<goal>test-compile</goal>
</goals>
</execution>
</executions>
<dependencies>
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjtools</artifactId>
<version>${aspectj.version}</version>
</dependency>
</dependencies>
</plugin>
</plugins>
</pluginManagement>
<plugins>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>aspectj-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjrt</artifactId>
<version>${aspectj.version}</version>
<scope>runtime</scope>
</dependency>
</dependencies>
</dependencyManagement>
<dependencies>
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjrt</artifactId>
</dependency>
</dependencies>
это похоже на известную проблему http://jira.codehaus.org/browse/MASPECTJ-125
вы можете исправить это, добавив следующее в файл pom.
<complianceLevel>1.6</complianceLevel>
посмотрев на ваш проект Maven https://github.com/dmitrievanthony/test-aspectj я узнал, что
- проблема полностью не связана с плагином AspectJ Maven,
- те же ошибки компиляции также происходят в плагине компилятора Maven и
- что основной причиной вашей проблемы является просто плохое управление зависимостями.
вот скриншот (полный размер здесь) из IntelliJ IDEA " найти класс":
как видите, класс LockModeType
в 3 (три!!!) зависимости, одна из которых содержит версию класса, которая не содержит ожидаемых значений перечисления. Код компилируется, если удалить эту зависимость.
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>ejb3-persistence</artifactId>
<version>1.0.2.GA</version>
</dependency>
Возможно, вам следует очистить свои зависимости. Вы можете использовать плагин зависимости Maven с такими целями, как dependency:analyze
и dependency:tree
для этой цели.
это будет работать после изменения конфигурации плагина на следующее:
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>aspectj-maven-plugin</artifactId>
<version>1.6</version>
<configuration>
<complianceLevel>1.7</complianceLevel>
<source>1.7</source>
<target>1.7</target>
<encoding>UTF-8</encoding>
</configuration>
<executions>
<execution>
<phase>process-sources</phase>
<goals>
<goal>compile</goal>
</goals>
<configuration>
<complianceLevel>1.7</complianceLevel>
<source>1.7</source>
<target>1.7</target>
</configuration>
</execution>
</executions>
</plugin>
но после этого я получаю много разных ошибок компиляции:
[ERROR] Failed to execute goal org.codehaus.mojo:aspectj-maven-plugin:1.6:compile (default) on project tvbs-portlet: Compiler errors:
[ERROR] error at Entitle.class, entitleId, LockModeType.PESSIMISTIC_WRITE);
[ERROR]
[ERROR] /Users/<...>/ejb/BillingEJB.java:43:0::0 PESSIMISTIC_WRITE cannot be resolved or is not a field
[ERROR] error at .createQuery("select e from Entitle e " +
[ERROR]
[ERROR] /Users/<...>/ejb/EntitleEJB.java:62:0::0 The method createQuery(String) in the type EntityManager is not applicable for the arguments (String, Class<Entitle>)
[ERROR] error at return entityManager.createQuery(
[ERROR] ^^
может вызвать неверные параметры плагина aspectj?
убедитесь, что модули имеют исходный код, например *.java etc. когда я компилирую CAS на версии 4.0.6, это происходит эта ошибка, я обнаружил, что cas-server-uber-webapp не имеет исходного кода в папке src. просто удалите модуль из родительского pom.XML.