web-dev-qa-db-de.com

AspectJ Maven Plugin kann mein Projekt nicht kompilieren

Ich versuche, das Aspektj Maven Plugin für das Kompilierungsprojekt mit dem Aspektj Compiler zu verwenden, und versuche dann, die Klassen in eine "War" -Datei zu packen. Leider funktioniert es nicht mit folgender Konfiguration (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>

Nach mvn clean install sehe ich folgende Ausnahmen:

[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

Könnte mir jemand eine Lösung vorschlagen?

14
dmitrievanthony

Update: Während die Dinge, die ich in dieser Antwort über die AspectJ Maven-Konfiguration gesagt habe, alle korrekt sind, ist die eigentliche Ursache des konkreten Problems - schlechtes Abhängigkeitsmanagement - in meiner anderen Antwort beschrieben. Es wäre besser, wenn dies die akzeptierte Antwort wäre und nicht diese.


  • Der Hinweis des User Codelion ist sinnvoll. Ändern Sie bitte Ihren <compilationLevel>-Tag (typo?) - in <complianceLevel>.
  • Ein Downgrade auf die Plugin-Version 1.6 ist nicht erforderlich. Sie können 1.7 beibehalten.
  • Es ist auch nicht erforderlich, die Konfiguration im Abschnitt <execution> erneut festzulegen. Die Konfiguration auf Plugin-Ebene reicht aus.
  • Bitte beachten Sie, dass die standardmäßige AspectJ-Version in Plugin 1.7 1.8.2 ist. Möglicherweise funktioniert Ihre Laufzeitabhängigkeit von 1.7.4. Wenn Sie jedoch ich wäre, würde ich diese Version auch aktualisieren, optimal synchron mit der Plugin-Version. Es ist keine harte Anforderung, aber ich denke, es macht Sinn.
  • Vielleicht möchten Sie sogar ein Upgrade auf die aktuelle Version AspectJ 1.8.4 durchführen, sowohl im Plugin als auch in der Laufzeitumgebung. Dies kann auch durch Hinzufügen einer Abhängigkeit zur gewünschten aspectjtools-Version der Plug-In-Konfiguration erreicht werden:
    <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

Es scheint ein bekanntes Problem zu sein http://jira.codehaus.org/browse/MASPECTJ-125

Sie können das Problem beheben, indem Sie der POM-Datei Folgendes hinzufügen.

<complianceLevel>1.6</complianceLevel>
12
codelion

Nachdem ich Ihr Maven-Projekt angesehen hatte https://github.com/dmitrievanthony/test-aspectj , habe ich das herausgefunden

  • das Problem ist völlig unabhängig von AspectJ Maven Plugin,
  • die gleichen Kompilierungsfehler treten auch in Maven Compiler Plugin und auf
  • dass die Hauptursache Ihres Problems einfach schlechtes Abhängigkeitsmanagement ist.

Hier ist ein Screenshot (in voller Größe hier ) von IntelliJ IDEAs "find class":

Class LockModeType is found 3x in the project

Wie Sie sehen, befindet sich die Klasse LockModeType in 3 (drei!) Abhängigkeiten, von denen eine eine Version der Klasse enthält, die nicht die erwarteten Enummenwerte enthält. Ihr Code wird kompiliert, wenn Sie diese Abhängigkeit entfernen.

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

Vielleicht sollten Sie Ihre Abhängigkeiten bereinigen. Sie können das Maven Dependency Plugin mit Zielen wie dependency:analyze und dependency:tree für diesen Zweck verwenden.

5
kriegaex

Es wird funktionieren, nachdem die Plugin-Konfiguration wie folgt geändert wurde:

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

Aber danach bekomme ich viele verschiedene Kompilierungsfehler:

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

Kann es zu falschen Parametern des Aspektj-Plugins kommen?

1
dmitrievanthony

stellen Sie sicher, dass die Module über Quellcode verfügen, wie * .Java etc . Wenn ich CAS in Version 4.0.6 kompiliere, tritt dieser Fehler auf. Ich habe festgestellt, dass der cas-server-uber-webapp keinen Quellcode in src enthält Mappe. Entfernen Sie einfach das Modul aus der übergeordneten Datei pom.xml.

0
user3125139