web-dev-qa-db-fra.com

AspectJ Maven Plugin ne peut pas compiler mon projet

J'essaye d'utiliser le plugin aspectj maven pour compiler le projet avec le compilateur aspectj puis j'essaie de mettre les classes en package dans un fichier "war". Malheureusement, cela ne fonctionne pas avec la configuration suivante (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>

Après mvn clean install, je vois les exceptions suivantes:

[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

Quelqu'un pourrait-il me suggérer une solution?

14
dmitrievanthony

Mise à jour: Bien que tout ce que j'ai dit à propos de la configuration AspectJ Maven dans cette réponse soit correct, la cause fondamentale du problème concret - la mauvaise gestion de la dépendance Maven - est décrite dans mon autre réponse . Il serait préférable que celle-ci soit la réponse acceptée et non celle-ci.


  • Le conseil de l'utilisateur codelion est logique, veuillez changer votre balise <compilationLevel> (typo?) - en <complianceLevel>.
  • Il n'est pas nécessaire de rétrograder au plugin version 1.6, vous pouvez garder 1.7.
  • Il n'est également pas nécessaire de spécifier à nouveau la configuration dans la section <execution>, celle au niveau du plugin suffit.
  • Veuillez noter que la version par défaut d'AspectJ dans le plugin 1.7 est 1.8.2, alors peut-être que votre dépendance à l'exécution de 1.7.4 fonctionnera, mais si j'étais vous, je le mettrais également à niveau, de manière optimale en synchronisation avec la version du plugin. Ce n'est pas une exigence difficile, mais je pense que cela a du sens.
  • Vous voudrez peut-être même passer à la version actuelle AspectJ 1.8.4, dans le plug-in et au moment de l'exécution. Ceci peut également être réalisé en ajoutant une dépendance à la version aspectjtools souhaitée à la configuration du plugin:
    <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>
6
kriegaex

Cela semble être un problème connu http://jira.codehaus.org/browse/MASPECTJ-125

Vous pouvez résoudre ce problème en ajoutant ce qui suit à votre fichier pom.

<complianceLevel>1.6</complianceLevel>
12
codelion

Après avoir examiné votre projet Maven https://github.com/dmitrievanthony/test-aspectj J'ai découvert que

  • le problème n'a aucun rapport avec AspectJ Maven Plugin,
  • les mêmes erreurs de compilation se produisent également dans Maven Compiler Plugin et
  • que la cause fondamentale de votre problème est tout simplement une mauvaise gestion de la dépendance.

Voici une capture d'écran (taille réelle ici ) de la "classe de recherche" d'IntelliJ IDEA:

Class LockModeType is found 3x in the project

Comme vous pouvez le constater, la classe LockModeType se trouve dans 3 (trois!) Dépendances, dont l'une contient une version de la classe qui ne contient pas les valeurs enum attendues. Votre code est compilé si vous supprimez cette dépendance.

    <dependency>
        <groupId>org.hibernate</groupId>
        <artifactId>ejb3-persistence</artifactId>
        <version>1.0.2.GA</version>
    </dependency>

Peut-être devriez-vous nettoyer vos dépendances. Vous pouvez utiliser le plugin Maven Dependency Plugin avec des objectifs tels que dependency:analyze et dependency:tree à cette fin.

5
kriegaex

Cela fonctionnera après la modification de la configuration du plug-in comme suit:

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

Mais après cela, je reçois de nombreuses erreurs de compilation:

[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] ^^

Peut causer des paramètres de plug-in d'aspectj incorrects?

1
dmitrievanthony

assurez-vous que les modules ont le code source, comme * .Java, etc . lorsque je compile CAS sur la version 4.0.6, il se produit cette erreur, j'ai trouvé que le serveur-uber-webapp n'a pas de code source dans src dossier. il suffit de supprimer le module de pom.xml parent.

0
user3125139