Question

I am trying to run Groovy and AspectJ on a module but when I add AspectJ, the classes seem to return very diferent values than I expected:

junit.framework.ComparisonFailure: null expected:<2011-04-03> but was:<null>

testGetUnixDayFromDate(com.baselogic.chapter05.utils.DateUtilitiesTest)  Time elapsed: 0.016 sec  <<< FAILURE!
junit.framework.AssertionFailedError: expected:<0> but was:<15037>

testGetDateDifferenceInDays(com.baselogic.chapter05.utils.DateUtilitiesTest)  Time elapsed: 0 sec  <<< FAILURE!
junit.framework.AssertionFailedError: expected:<0> but was:<7>

This is not what I expected and when I turn the off AspectJ, this all runs fine.

    -------------------------------------------------------
     T E S T S
    -------------------------------------------------------
    Running com.baselogic.chapter05.utils.DateUtilitiesJavaTest
    Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.422 sec
    Running com.baselogic.chapter05.utils.DateUtilitiesTest
    2011-04-03
    Tests run: 3, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.062 sec
    Running com.baselogic.chapter05.utils.StringUtilitiesTest

    Tests run: 26, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.078 sec

    Results :

    Tests run: 30, Failures: 0, Errors: 0, Skipped: 0

    ...

Here is my AspectJ plugin that seems to be causing the issue:

        <plugin>
            <groupId>org.codehaus.mojo</groupId>
            <artifactId>aspectj-maven-plugin</artifactId>
            <version>1.3.1</version>
            <executions>
                <execution>
                    <goals>
                        <goal>compile</goal>
                        <goal>test-compile</goal>
                    </goals>
                </execution>
            </executions>
            <configuration>
                <complianceLevel>1.6</complianceLevel>
            </configuration>
        </plugin>

But when I enable aspectj-maven-plugin everything starts failing:

    [INFO] ------------------------------------------------------------------------
    [INFO] Building Chapter 05: Extending 1.0.2
    [INFO] ------------------------------------------------------------------------
    [INFO]
    [INFO] --- maven-clean-plugin:2.4.1:clean (default-clean) @ ch05 ---
    [INFO] Deleting C:\usr\SYNCH\PACKT\3166\Chapters_Code\ch05\target
    [INFO]
    [INFO] --- gmaven-plugin:1.3:generateStubs (default) @ ch05 ---
    [INFO] Generated 2 Java stubs
    [INFO]
    [INFO] --- maven-resources-plugin:2.4.3:resources (default-resources) @ ch05 ---
    [INFO] Using 'UTF-8' encoding to copy filtered resources.
    [INFO] Copying 0 resource
    [INFO]
    [INFO] --- maven-compiler-plugin:2.3.2:compile (default-compile) @ ch05 ---
    [INFO] Compiling 2 source files to C:\usr\SYNCH\PACKT\3166\Chapters_Code\ch05\target\classes
    [INFO]
    [INFO] --- maven-scala-plugin:2.15.2:compile (default) @ ch05 ---
    [INFO] Checking for multiple versions of scala
    [INFO] includes = [**/*.scala,**/*.java,]
    [INFO] excludes = []
    [INFO] C:\usr\SYNCH\PACKT\3166\Chapters_Code\ch05\src\main\java:-1: info: compiling
    [INFO] C:\usr\SYNCH\PACKT\3166\Chapters_Code\ch05\target\generated-sources\groovy-stubs\main:-1: info: compiling
    [INFO] C:\usr\SYNCH\PACKT\3166\Chapters_Code\ch05\src\main\groovy:-1: info: compiling
    [INFO] C:\usr\SYNCH\PACKT\3166\Chapters_Code\ch05\src\main\scala:-1: info: compiling
    [INFO] Compiling 3 source files to C:\usr\SYNCH\PACKT\3166\Chapters_Code\ch05\target\classes at 1301955015855
    [INFO] prepare-compile in 0 s
    [INFO] compile in 4 s
    [INFO]
    [INFO] --- gmaven-plugin:1.3:compile (default) @ ch05 ---
    [INFO] Compiled 3 Groovy classes
    [INFO]
    [INFO] --- clojure-maven-plugin:1.3.7:compile (compile-clojure) @ ch05 ---
    [INFO]
    [INFO] --- aspectj-maven-plugin:1.3.1:compile (default) @ ch05 ---
    [INFO]
    [INFO] --- gmaven-plugin:1.3:generateTestStubs (default) @ ch05 ---
    [INFO] Generated 2 Java stubs
    [INFO]
    [INFO] --- maven-resources-plugin:2.4.3:testResources (default-testResources) @ ch05 ---
    [INFO] Using 'UTF-8' encoding to copy filtered resources.
    [INFO] Copying 0 resource
    [INFO]
    [INFO] --- maven-compiler-plugin:2.3.2:testCompile (default-testCompile) @ ch05 ---
    [INFO] Compiling 3 source files to C:\usr\SYNCH\PACKT\3166\Chapters_Code\ch05\target\test-classes
    [INFO]
    [INFO] --- maven-scala-plugin:2.15.2:testCompile (default) @ ch05 ---
    [INFO] Checking for multiple versions of scala
    [INFO] includes = [**/*.scala,**/*.java,]
    [INFO] excludes = []
    [INFO] C:\usr\SYNCH\PACKT\3166\Chapters_Code\ch05\src\test\java:-1: info: compiling
    [INFO] C:\usr\SYNCH\PACKT\3166\Chapters_Code\ch05\target\generated-sources\groovy-stubs\test:-1: info: compiling
    [INFO] C:\usr\SYNCH\PACKT\3166\Chapters_Code\ch05\src\test\groovy:-1: info: compiling
    [INFO] C:\usr\SYNCH\PACKT\3166\Chapters_Code\ch05\src\test\scala:-1: info: compiling
    [INFO] Compiling 3 source files to C:\usr\SYNCH\PACKT\3166\Chapters_Code\ch05\target\test-classes at 1301955027323
    [INFO] prepare-compile in 0 s
    [INFO] compile in 3 s
    [INFO]
    [INFO] --- gmaven-plugin:1.3:testCompile (default) @ ch05 ---
    [INFO] Compiled 2 Groovy classes
    [INFO]
    [INFO] --- aspectj-maven-plugin:1.3.1:test-compile (default) @ ch05 ---
    [WARNING] No sources found skipping aspectJ compile
    [INFO]
    [INFO] --- maven-surefire-plugin:2.7.1:test (default-test) @ ch05 ---
    [INFO] Surefire report directory: C:\usr\SYNCH\PACKT\3166\Chapters_Code\ch05\target\surefire-reports

    -------------------------------------------------------
     T E S T S
    -------------------------------------------------------
    Running com.baselogic.chapter05.utils.DateUtilitiesJavaTest
    Apr 4, 2011 6:10:31 PM com.baselogic.chapter05.utils.DateUtilities getYesterdayDate_aroundBody11$advice
    INFO: --------------------
    Apr 4, 2011 6:10:31 PM com.baselogic.chapter05.utils.DateUtilities getYesterdayDate_aroundBody11$advice
    ...
    Tests run: 26, Failures: 21, Errors: 0, Skipped: 0, Time elapsed: 0.093 sec <<< FAILURE!

    Results :

    Failed tests:
      testGetYesterdayDate(com.baselogic.chapter05.utils.DateUtilitiesJavaTest)
    ...

    Tests run: 31, Failures: 26, Errors: 0, Skipped: 0

    [ERROR] There are test failures.

    Please refer to C:\usr\SYNCH\PACKT\3166\Chapters_Code\ch05\target\surefire-reports for the individual test results.

Here is the Groovy test:

    package com.baselogic.chapter05.utils

    import groovy.util.GroovyTestCase
    import java.util.Calendar
    import java.text.SimpleDateFormat

    class DateUtilitiesTest extends GroovyTestCase {
        protected void setUp() {
            super.setUp()
        }

        protected void tearDown() {
            super.tearDown()
        }

        public void testGetYesterdayDate() {
            Calendar calendar = Calendar.getInstance()
            calendar.add(Calendar.DATE, -1)
            SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd")
            String expected = format.format(calendar.getTime());

            String result = DateUtilities.getYesterdayDate()
            println(result)
            assertEquals(expected, result)
        }

        void testGetUnixDayFromDate() {
            java.text.SimpleDateFormat formatter = new java.text.SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
            java.util.Date date = (java.util.Date) formatter.parse("2011-03-03 23:59:59");
            assertEquals(DateUtilities.getUnixDayFromDate(date), 15037);
        }

        void testGetDateDifferenceInDays() {
            java.text.SimpleDateFormat formatter = new java.text.SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
            java.util.Date date1 = (java.util.Date) formatter.parse("2011-03-03 23:59:59");
            java.util.Date date2 = (java.util.Date) formatter.parse("2011-03-10 23:59:59");
            assertEquals(DateUtilities.getDateDifferenceInDays(date1, date2), 7);
        }
    }

Then I created a Java unit test case as well:

    package com.baselogic.chapter05.utils;

    import org.junit.Test;

    import static org.junit.Assert.assertEquals;

    import java.text.SimpleDateFormat;
    import java.util.Calendar;

    public class DateUtilitiesJavaTest {

        @Test
        public void testGetYesterdayDate() {
            Calendar calendar = Calendar.getInstance();
            calendar.add(Calendar.DATE, -1);
            SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
            String expected = format.format(calendar.getTime());

            String result = DateUtilities.getYesterdayDate();
            // Aspect DontWriteToTheConsole will complain:
            // System.out.println(result);
            assertEquals(expected, result);
        }

        @Test
        public void testGetYesterdayDateScala() {
            Calendar calendar = Calendar.getInstance();
            calendar.add(Calendar.DATE, -1);
            SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
            String expected = format.format(calendar.getTime());

            String result = ScalaDateUtilities.getYesterdayDate();
            assertEquals(expected, result);
        }
    }

Can anyone help me understand why the aspectj-maven-plugin seems to be causing compilation errors with my final bytecode?

Was it helpful?

Solution

My experience with the GMaven has been poor. Once I switched to Gradle, much of the 'weirdness' went away. This sounds like that kind of weirdness you don't want to waste time with GMaven.

OTHER TIPS

I think that switching to Gradle is not a solution but an expensive workaround, especially for big projects. So I disagree with Mike Wazowski. Maybe you should just fix your Maven setup. There are several things you can do:

  • First of all, AspectJ Maven 1.3.1 ist from 2011 and uses a very old AspectJ version (1.6.10). Why not upgrade to AspectJ Maven 1.7 which uses AsepctJ 1.8.2 by default? You can even upgrade it to AspectJ 1.8.6, the latest version containing more bugfixes?

  • You could also consider switching from GMaven to GMavenPlus because the former is no longer mainained AFAIK, while the latter is.

  • BTW, you could also switch from Java 6 to 8 or at least 7 because Java 6 is no longer maintained.

My AspectJ Maven setup usually looks something like this (I am omitting GMaven setup here):

<properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <java.source-target.version>1.8</java.source-target.version>
    <aspectj.version>1.8.6</aspectj.version>
</properties>

<build>
    <pluginManagement>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.1</version>
                <configuration>
                    <source>${java.source-target.version}</source>
                    <target>${java.source-target.version}</target>
                    <!-- IMPORTANT -->
                    <useIncrementalCompilation>false</useIncrementalCompilation>
                </configuration>
            </plugin>
            <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.apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
        </plugin>
        <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>
Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top