Monday, September 2, 2013

Mavenizing the Flex SDK - The Missing Documentation

For those of us using Maven and Flex, we need to get the Flex artifacts uploaded to a Maven repository. In my case, I have an Artifactory instance that can house corporate artifacts and third-party artifacts, and proxy artifacts available on the internet.

The Apache Flex project has a couple of SDK utilities that greatly help moving all the necessary artifacts into a Maven repository. Specifically:

  1. Apache Flex SDK Installer
  2. Apache Flex SDK Mavenizer

The Apache Flex SDK Installer is a download utility that will simplify pulling down Adobe AIR, Flex SDK, and Flash Player. After installing the installer, run it to select the versions that you want to download. For my case, I downloaded:

  • Flex SDK 4.10.0
  • AIR 3.8
  • Flash Player 11.8
I specified an empty installation directory that I created first (C:\temp\apache\flexsdk), checked all the the license agreements, and then clicked on Install.

The Apache Flex SDK Mavenizer seems to only be available in source-code form. It can be downloaded using either Subversion or Git:

Subversion
https://svn.apache.org/repos/asf/flex/utilities/trunk/mavenizer/
Git
https://git-wip-us.apache.org/repos/asf/flex-utilities.git

Checkout (Subversion) or Clone (Git) the project, then build it using maven. For example:

C:\temp\apache\mavenizer> mvn package

The Apache Flex SDK Mavenizer has the following usage:

java -cp target/flex-sdk-converter-1.0.jar SDKGenerator "[sdkhome]" "[fdktarget]" false
where the sdkhome directory is structured like:
[sdkhome]
  +- air
    +- AdobeAIRSDK-[Airversion]
  +- flex
    +- flex_sdk_[Flexversion]

The Apache Flex SDK Installer downloads everything into one directory (C:\temp\apache\flexsdk), but the Apache Flex SDK Mavenizer expects the AIR SDK and the Flex SDK to be in different directories. Rather than trying to dissect the AIR SDK from the Flex SDK, the easiest solution is to duplicate the one directory so that it fits the necessary structure. For example:

C:\temp\apache> mkdir sdkhome
C:\temp\apache> mkdir sdkhome\air
C:\temp\apache> mkdir sdkhome\flex
C:\temp\apache> xcopy /s flexsdk sdkhome\air\AdobeAIRSDK-3.8\
C:\temp\apache> xcopy /s flexsdk sdkhome\flex\flex_sdk_4.10.0\

Next, create an empty target directory that will contain the artifacts in Maven format:

C:\temp\apache> mkdir fdktarget

Now you can run the SDK Generator step of the Apache Flex SDK Mavenizer:

C:\temp\apache\mavenizer> java -cp target\flex-sdk-converter-1.0.jar SDKGenerator "C:\temp\apache\sdkhome" "C:\temp\apache\fdktarget\" false
Note that the last argument is false as long as flexmojos-maven-plugin will be used; when maven-flex-plugin is used, then true will be specified.

Feel free to inspect the results of fdktarget. There are a lot of files -- too many to deploy manually to Artifactory. Luckily, the Apache Flex SDK Mavenizer utility has the SDK Deployer step that will upload these files to a repository. For example:

C:\temp\apache\mavenizer> java -cp target\flex-sdk-converter-1.0.jar SDKDeployer "C:\temp\apache\fdktarget\" flex-releases http://ArtifactoryHost/artifactory/third-party-releases-local/ "C:\apache-maven-3.0.4\bin\mvn.bat"

Note that flex-releases refers to a <server> entry in my Maven settings.xml that contains credentials for Artifactory. For example:

<settings>
  <servers>
    <server>
      <id>flex-releases</id>
      <username>awhitford</username>
      <password>super-secret</password>
    </server>
  </servers>
</settings>

There is a lot to upload, so be patient.

2 comments:

  1. Thanks - I found this very useful.

    I think it is worth mentioning that the instructions assume a "third-party-releases-local" repository exists on your Artifactory (it did not on mine).

    ReplyDelete
  2. Hi,

    I am using Apache Flex SDK Mavenizer SDK Deployer task to deploy mavenized 4.10 SDK artifacts to corporate artifcatory. Below given is command and multiple same error blocks I am getting (listing 1 here).
    It says Done also in the end. What does this mean, has it deployed or not? I don't yet see artifacts on artifactory also.

    java -cp target/flex-sdk-converter-1.0.jar SDKDeployer "/Users/poonam.anand/kiwik_workspace/apache/fdktarget/" flex-releases http://station117.in.guavus.com:8081/artifactory/libs-release-local/ "/usr/local/apache-maven-3.0.4/bin/mvn.bat"

    /usr/local/apache-maven-3.0.4/bin/mvn.bat: line 1: @REM: command not found
    /usr/local/apache-maven-3.0.4/bin/mvn.bat: line 2: syntax error near unexpected token `('
    /usr/local/apache-maven-3.0.4/bin/mvn.bat: line 2: `@REM Licensed to the Apache Software Foundation (ASF) under one
    '
    Done.

    Poonam

    ReplyDelete