For the past two days, I've been trying to get get FlexUnit, FlexMojos, and Mockolate to work together so that I can run tests in TeamCity, but I have not been having any luck.
I have one project on Teamcity currently that uses FlexMojos and the FlexMojos-flexunit that works, however that project is not using Mockolate.
The pom for that project looks like this:
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>CENSOREDt</groupId>
<artifactId>CENSORED</artifactId>
<version>CENSORED</version>
<name>CENSORED</name>
<packaging>swc</packaging>
<properties>
<flex.version>4.1.0.16248</flex.version>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<sonar.language>flex</sonar.language>
<sonar.dynamicanalysis>false</sonar.dynamicanalysis>
</properties>
<dependencies>
<dependency>
CENSORED
<dependency>
<groupId>org.puremvc.as3</groupId>
<artifactId>PureMVC_AS3</artifactId>
<version>2.0.4</version>
<type>swc</type>
</dependency>
<dependency>
<groupId>com.adobe</groupId>
<artifactId>componentsFlashIDE</artifactId>
<type>swc</type>
<version>0.0.1</version>
</dependency>
<dependency>
<groupId>fl</groupId>
<artifactId>components</artifactId>
<version>1.0</version>
<type>swc</type>
</dependency>
<dependency>
<groupId>com.greensock</groupId>
<artifactId>greensock</artifactId>
<version>v11</version>
<type>swc</type>
</dependency>
<dependency>
<groupId>caurina.transitions</groupId>
<artifactId>Tweener</artifactId>
<version>1.2</version>
<type>swc</type>
</dependency>
<!-- test-scope dependencies: -->
<dependency>
<groupId>org.sonatype.flexmojos</groupId>
<artifactId>flexmojos-unittest-flexunit4</artifactId>
<version>4.1-beta</version>
<type>swc</type>
<scope>test</scope>
<exclusions>
<exclusion>
<groupId>com.adobe.flex.framework</groupId>
<artifactId>playerglobal</artifactId>
</exclusion>
<exclusion>
<groupId>com.adobe.flex.framework</groupId>
<artifactId>airframework</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.hamcrest</groupId>
<artifactId>hamcrest-as3</artifactId>
<version>1.1</version>
<type>swc</type>
<scope>test</scope>
</dependency>
</dependencies>
<repositories>
<repository>
<id>artifactory-libs</id>
<name>artifactory-libs-release</name>
<url>http://artifactory/artifactory/libs-release-local</url>
<releases>
<enabled>true</enabled>
</releases>
<snapshots>
<enabled>false</enabled>
</snapshots>
</repository>
<repository>
<id>artifactory-snapshots</id>
<name>artifactory-libs-snapshots</name>
<url>http://artifactory/artifactory/libs-snapshot-local</url>
<releases>
<enabled>false</enabled>
</releases>
<snapshots>
<enabled>true</enabled>
<updatePolicy>always</updatePolicy>
</snapshots>
</repository>
<repository>
<id>artifactory-ext</id>
<name>artifactory-ext-release</name>
<url>http://artifactory/artifactory/ext-release-local</url>
</repository>
<repository>
<id>flex-mojos-repository</id>
<name>flex-mojos-repository</name>
<url>http://repository.sonatype.org/content/groups/flexgroup</url>
</repository>
</repositories>
<pluginRepositories>
<pluginRepository>
<id>flex-mojos-plugin-repository</id>
<url>http://repository.sonatype.org/content/groups/flexgroup</url>
</pluginRepository>
<pluginRepository>
<id>flexpmd.opensource.adobe</id>
<name>FlexPMD repository on opensource.adobe.com</name>
<url>http://opensource.adobe.com/svn/opensource/flexpmd/maven-repository/release/</url>
</pluginRepository>
</pluginRepositories>
<distributionManagement>
<repository>
<id>artifactory</id>
<name>artifactory-releases</name>
<url>http://artifactory/artifactory/libs-release-local</url>
</repository>
<snapshotRepository>
<id>artifactory</id>
<name>artifactory-snapshots</name>
<url>http://artifactory/artifactory/libs-snapshot-local</url>
</snapshotRepository>
</distributionManagement>
<build>
<finalName>${project.artifactId}</finalName>
<testSourceDirectory>test</testSourceDirectory>
<sourceDirectory>src/</sourceDirectory>
<plugins>
<plugin>
<groupId>org.sonatype.flexmojos</groupId>
<artifactId>flexmojos-maven-plugin</artifactId>
<version>4.0-RC2</version>
<extensions>true</extensions>
<dependencies>
<dependency>
<groupId>com.adobe.flex</groupId>
<artifactId>compiler</artifactId>
<version>${flex.version}</version>
<type>pom</type>
</dependency>
</dependencies>
<configuration>
<storepass/>
<targetPlayer>10.1</targetPlayer>
<compilerWarnings>
<warn-no-constructor>false</warn-no-constructor>
</compilerWarnings>
</configuration>
</plugin>
</plugins>
</build>
<reporting>
</reporting>
It works fine. When I add a reference to Mockolate however, the build fails because of some sort of conflicting classes in FlexUnit.
I read on this link here that I need to remove the reference to flexMojos-flexunit and give my own reference to FlexUnit4 in the pom. I did that. However now I get an error reading:
Failed to execute goal org.sonatype.flexmojos:flexmojos-maven-plugin:4.0-RC2:test-compile (default-test-compile) on project slots_client_common: java.lang.reflect.InvocationTargetException: Not found any compatible unit test framework
My current POM which is NOT working looks like this:
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.CENSORED.client</groupId>
<artifactId>CENSORED</artifactId>
<version>CENSORED</version>
<name>CENSORED</name>
<packaging>swc</packaging>
<properties>
<flex.version>4.1.0.16248</flex.version>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<sonar.language>flex</sonar.language>
<sonar.dynamicanalysis>false</sonar.dynamicanalysis>
</properties>
<dependencies>
<dependency>
CENSORED
</dependency>
<dependency>
CENSORED
</dependency>
<dependency>
<groupId>org.puremvc.as3</groupId>
<artifactId>PureMVC_AS3</artifactId>
<version>2.0.4</version>
<type>swc</type>
</dependency>
<!-- test-scope dependencies: -->
<dependency>
<groupId>com.adobe.felxunit</groupId>
<artifactId>flexunit</artifactId>
<version>4.1.0-8</version>
<classifier>as3</classifier>
<type>swc</type>
<scope>test</scope>
<exclusions>
<exclusion>
<groupId>com.adobe.flex.framework</groupId>
<artifactId>playerglobal</artifactId>
</exclusion>
<exclusion>
<groupId>com.adobe.flex.framework</groupId>
<artifactId>airframework</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.hamcrest</groupId>
<artifactId>hamcrest-as3</artifactId>
<version>1.1</version>
<type>swc</type>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.mockolate</groupId>
<artifactId>mockolate</artifactId>
<version>0.12.4</version>
<classifier>as3</classifier>
<type>swc</type>
<scope>test</scope>
</dependency>
</dependencies>
<repositories>
<repository>
<id>artifactory-libs</id>
<name>artifactory-libs-release</name>
<url>http://artifactory/artifactory/libs-release-local</url>
<releases>
<enabled>true</enabled>
</releases>
<snapshots>
<enabled>false</enabled>
</snapshots>
</repository>
<repository>
<id>artifactory-snapshots</id>
<name>artifactory-libs-snapshots</name>
<url>http://artifactory/artifactory/libs-snapshot-local</url>
<releases>
<enabled>false</enabled>
</releases>
<snapshots>
<enabled>true</enabled>
</snapshots>
</repository>
<repository>
<id>artifactory-ext</id>
<name>artifactory-ext-release</name>
<url>http://artifactory/artifactory/ext-release-local</url>
</repository>
<repository>
<id>flex-mojos-repository</id>
<name>flex-mojos-repository</name>
<url>http://repository.sonatype.org/content/groups/flexgroup</url>
</repository>
</repositories>
<pluginRepositories>
<pluginRepository>
<id>flex-mojos-plugin-repository</id>
<url>http://repository.sonatype.org/content/groups/flexgroup</url>
</pluginRepository>
<pluginRepository>
<id>flexpmd.opensource.adobe</id>
<name>FlexPMD repository on opensource.adobe.com</name>
<url>http://opensource.adobe.com/svn/opensource/flexpmd/maven-repository/release/</url>
</pluginRepository>
</pluginRepositories>
<distributionManagement>
<repository>
<id>artifactory</id>
<name>artifactory-releases</name>
<url>http://artifactory/artifactory/libs-release-local</url>
</repository>
<snapshotRepository>
<id>artifactory</id>
<name>artifactory-snapshots</name>
<url>http://artifactory/artifactory/libs-snapshot-local</url>
</snapshotRepository>
</distributionManagement>
<build>
<finalName>${project.artifactId}</finalName>
<testSourceDirectory>tests</testSourceDirectory>
<sourceDirectory>src/</sourceDirectory>
<plugins>
<plugin>
<groupId>org.sonatype.flexmojos</groupId>
<artifactId>flexmojos-maven-plugin</artifactId>
<version>4.0-RC2</version>
<extensions>true</extensions>
<dependencies>
<dependency>
<groupId>com.adobe.flex</groupId>
<artifactId>compiler</artifactId>
<version>${flex.version}</version>
<type>pom</type>
</dependency>
</dependencies>
<configuration>
<targetPlayer>10.1</targetPlayer>
<compilerWarnings>
<warn-no-constructor>false</warn-no-constructor>
</compilerWarnings>
<storepass/>
</configuration>
</plugin>
</plugins>
</build>
The FlexUnit4 swc exists in my artifactory, and IntelliJ gives me no warnings or errors in the Maven before trying to build.
Thanks for any help.
Thanks to some great folks over at the Apache Flex dev forum (Frédéric THOMAS and @chrisdutz ) I was able to get the answer to my question:
First, you need to mavenize the SDK you want to use, in my case that was Flex SDK 4.1A
Then, you can set up your pom like this: