Рубрика: Flex

Сборка простого flex приложения с помощью Flex Mojos

Разберу как собрать простой проект с помощью Flex Mojos.

Начальные условия

установленная java jdk 5 или выше.
переменная окружения JAVA_HOME
установленный maven.

Стандартная для maven структура проекта

project-name/pom.xml………………. конфигурационный файл сборки проекта.
project-name/src
project-name/src/main/
project-name/src/main/flex…………. код flex приложения
project-name/src/test
project-name/src/test/flex…………. тесты flex приложения
project-name/src/main/flex/Main.mxml

Структура pom.xml

pom собирающий flex приложение:

XML:

<?xml version="1.0"?>
<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 href="http://maven.apache.org/maven-v4_0_0.xsd">">http://maven.apache.org/maven-v4_0_0.xsd">
 
    <parent>
         <groupId>info.rvin.mojo</groupId>
         <artifactId>flex-super-pom</artifactId>
         <version>1.0</version>
    </parent>
 
    <modelVersion>4.0.0</modelVersion>
 
    <groupId>com.mydomain.mypackage</groupId>
    <artifactId>myArtifactId</artifactId>
    <packaging>swf</packaging>
    <name>myArtifactName</name>
    <version>1.0</version>
 
    
    <repositories>
                <repository>
                        <id>flex-mojos-repository</id>
                        <url>http://svn.sonatype.org/flexmojos/repository/</url>
                        <releases>
                                <enabled>true</enabled>
                        </releases>
                </repository>
     </repositories>
 
    <pluginRepositories>
        <pluginRepository>
          <id>flex-mojos-repository</id>
          <url>http://svn.sonatype.org/flexmojos/repository/</url>
          <releases>
            <enabled>true</enabled>
          </releases>
          <snapshots>
            <enabled>false</enabled>
          </snapshots>
        </pluginRepository>
      </pluginRepositories>
 
</project>

Запуск сборки проекта с помощью maven

Для сборки приложения необходимо набрать в командной строке,
project-name> mvn install

Рассмортим pom.xml по частям

XML:

<parent>
    <groupId>info.rvin.mojo</groupId>
    <artifactId>flex-super-pom</artifactId>
    <version>1.0</version>
</parent>

тег parent определяет родительский pom, для текущего pom.
В maven, текущий проект наследует свойства родительского.
В качестве родительского pom, для flex проекта здесь выступает flex-super-pom, который является частью flex-mojos. В нём определены многие полезные параметры, которые можно использовать по умолчанию. В своём проекте вы можете использовать собственный parent, взяв из flex-super-pom только необходимое.

Следующие теги определяют ваш артефакт в репозитории maven. В дальнейшем вы сможете использовать данный артифакт в других проектах.

XML:

<groupId>com.mydomain.mypackage</groupId>
    <artifactId>myArtifactId</artifactId>
    <packaging>swf</packaging>
    <name>myArtifactName</name>
    <version>1.0</version>

Стоит отметить

XML:

<packaging>swf</packaging>

- определяет тип артифакта, для библиотеки это swc.

XML:

<repositories>
                <repository>
                        <id>flex-mojos-repository</id>
                        <url>http://svn.sonatype.org/flexmojos/repository/</url>
                        <releases>
                                <enabled>true</enabled>
                        </releases>
                </repository>
     </repositories>

тег repositories определяет перечень репозиториев, в которых можно осуществлять поиск артифактов.

XML:

<pluginRepositories>
        <pluginRepository>
          <id>flex-mojos-repository</id>
          <url>http://svn.sonatype.org/flexmojos/repository/</url>
          <releases>
            <enabled>true</enabled>
          </releases>
          <snapshots>
            <enabled>false</enabled>
          </snapshots>
        </pluginRepository>
      </pluginRepositories>

тег pluginRepositories определяет перечень репозиториев, в которых можно осуществлять поиск maven плагинов.

Полезные дополнения

Удаление артефактов осуществляется командой project-name>mvn clean
Генерация asdoc, осуществляется командой project-name>mvn asdoc:asdoc
Команды можно комбинировать, например project-name>mvn clean install

Что ещё может Flex mojos?

Компелить SWF, SWC, ASWF, ASWC.
Запускать тесты.
Поддерживать RSL.
Оптимизировать, шифровать swf.
Создавать html wrapper,
В итоге собирать сложные проекты, включающие библиотеки, стили, локализацию, flex модули.

Плюсы использования maven для flex сборки

По моему опыту плюсом является стандартизация структуры проекта. Для того что бы понять что откуда берёться, достаточно посмотреть pom.xml.

Bookmark this article at

Постоянная ссылка 2008-07-04 10:59:45, от agahov Email , 466 слов, Рубрики: Flex, maven , 1 комментарий »

Flex Mojos - A Maven Flex Plugin

Недавно вышел новый Flex Mojos - A Maven Flex Plugin. Если вы собираетесь внедрять maven, рекомендую к нему присмотреться.

Сборка приложения использующего BlazeDS, Spring, Hibernate. очень хорошо описана в наборе статей (Flex, Spring and BlazeDS: the full stack! part 1, part2 , part3, part4)

Bookmark this article at

Постоянная ссылка 2008-07-03 10:18:53, от agahov Email , 21 слов, Рубрики: Flex, AS3, maven , 2 комментариев »

Flex + Maven часть1

Для сборки flex c помощью maven необходимо произвести следующие действия:
- установить MAVEN
- установить flex sdk
- создать файл проекта pom.xml
- настроить среду
- создать структуру проекта и Main.mxml
- запустить maven

Создание файла проекта pom.xml
плагин для сборки swf/swc http://www.israfil.net
пример pom.xml для flex

XML:

<?xml version="1.0" encoding="UTF-8"?>
<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/xsd/maven-4.0.0.xsd">
 
    <name>test-flex-swf</name>
    <groupid>test</groupid>
    <artifactid>test-flex-swf</artifactid>
    <version>1.0</version>
    <modelversion>4.0.0</modelversion>
    <description>test build flex with maven.
    see: </description>">http://riapriority.com/blogs/agahov.php</description>
 
    <packaging>swf</packaging>
 
  <properties>
                <flex .home>C:/FLEX_HOME/sdk/2.0.1</flex>
      </properties>
    <build>
        <plugins>
            <plugin>
                <groupid>net.israfil.mojo</groupid>
                <artifactid>maven-flex2-plugin</artifactid>
                <extensions>true</extensions>
                <configuration>
        <flexhome>${flex.home}</flexhome>
                    <mainmxmlfile>Main.mxml</mainmxmlfile>
                </configuration>
            </plugin>
        </plugins>
    </build>
</project>

Настройка среды
- flex.home в pom.xml должна ссылаться на flex sdk, которую вы хоти использовать для сборки

не забудте в файле $flex.home/frameworks/flex-config.xml отредактировать следующую строку:
winFonts.ser - для windows
macFonts.ser - для MAC

XML:

<flex -config>
        <compiler>
                <fonts>
                        <local -fonts-snapshot>---Fonts.ser</local>
                </fonts>
        </compiler>
</flex>

Cтруктура проекта
project-name/pom.xml
project-name/src
project-name/src/main/
project-name/src/main/flex
project-name/src/test
project-name/src/main/flex/Main.mxml

Main.mxml может быть таким:

XML:

<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute">
<mx:Script>
  <![CDATA[
    import mx.controls.Alert;
    
    private function start():void
    {
      Alert.show("hi maven!");
    }
  ]]>
</mx:Script>
 
  <mx:Button click="start()"/>
</mx:Application>

Сборка проекта с помощю maven
для сборки проекта зайдите в папку [project-name] и выполните команду: mvn pakage

исходники

Bookmark this article at

Постоянная ссылка 2007-11-27 11:00:10, от agahov Email , 325 слов, Рубрики: Flex, AS3, maven , 4 комментариев »

Клонирование объектов утилитой ObjectUtil.copy

Нам понадобилось клонировать объект. Для этого в as3 можно использовать утилиту ObjectUtil.copy. Метод ObjectUtil.copy(obj) возвращает копию исходного объекта obj. Это замечательно работает для невизуальных объектов.
Пример:

  1. package com.test
  2. {
  3.         public class TestClass
  4.         {
  5.                 public var index : int = 100;
  6.         }
  7. }
  8.  
  9. ...
  10. var testObject:TestClass = new TestClass();
  11. testObject.index = 98;
  12. var cloneTestObject : Object = ObjectUtil.copy(testObject);
  13. trace(“cloneTestObject.index : ” + cloneTestObject); // cloneTestObject.index : 98
  14. ...

Но есть ложка дегтя. Данная функция возвращает анонимный объект. И система не позволяет осуществить его приведение к исходному классу.
Данный код приведет к сбою в программе:

  1. ...
  2. var testObject:TestClass = new TestClass();
  3. testObject = 99;
  4. var cloneTestObject : TestClass = ObjectUtil.copy(testObject) as TestClass;
  5. trace(index: ”+  cloneTestObject.index);
  6. ...

После некоторых исследований и подсказки Константина Ковалёва, находим метод flash.net.registerClassAlias. Который и решает проблему:

  1. ...
  2. var testObject:TestClass = new TestClass();
  3. registerClassAlias(getQualifiedClassName(testObject), TestClass);
  4. var cloneTestObject : TestClass = ObjectUtil.copy(testObject) as TestClass;
  5. ...

Для тех, кто хочет докопаться до сути процесса. В справке по registerClassAlias написано: «LocalConnection, ByteArray, SharedObject, NetConnection and NetStream are all examples of classes that encode objects in AMF.» Так как метод ObjectUtil.copy, использует ByteArray, то наш результирующий объект кодируется в формат AMF. Для восстановления класса объекта, используется функция flash.net.registerClassAlias.

Bookmark this article at

Постоянная ссылка 2007-05-08 11:30:56, от agahov Email , 654 слов, Рубрики: Flex, AS3 , 4 комментариев »

Публичные переменные в классе flash.geom.Point

Дополнение к посту «Публичные переменные это зло… »
Постараюсь более подробно раскрыть проблему реализации системного класса flash.geom.Point.

Изучим структуру flash.geom.Point:

  1. var myTestPoint : Point = new Point(9,9);
  2. trace(describeType(myTestPoint));

в данные момент меня интересуют две строчки, которые говорят что свойства x, y класса flash.geom.Point, описаны как публичные переменные


variable name="x” type="Number”

variable name="y” type="Number”

какие проблемы это вызывает?

Отсутствует возможность переопределить данные свойства в классе потомке.

Пример 1:

  1. Point;
  2.  
  3.         public class MyPoint extends Point
  4.         {
  5.                
  6.                 public function set x (v:Number)
  7.                 {
  8.                         x = v;
  9.                 }
  10.         }
  11. }

error: 1024: Overriding a function that is not marked for override.

Пример 2:

  1. package
  2. {
  3.         import flash.geom.Point;
  4.  
  5.         public class MyPoint extends Point
  6.         {
  7.                
  8.                 public override function set x (v:Number)
  9.                 {
  10.                         x = v;
  11.                 }
  12.         }
  13. }

error: 1023: Incompatible override.

Следовательно для реализации, например, интерфейса IPoint

  1. package
  2. {
  3.         public class IPoint
  4.         {
  5.                
  6.                 function set x (v : Number) : void;
  7.                 function get x () : Number;
  8.                
  9.                 function set y (v : Number) : void;
  10.                 function get y () : Number;
  11.                
  12.         }
  13. }

нельзя использовать использовать наследование

  1. public class MyPoint extends Point implements IPoint

придется использовать делегацию:

  1. package
  2. {
  3.         import flash.geom.Point;
  4.  
  5.         public class MyPoint implements IPoint
  6.         {
  7.                
  8.                 private var _point : Point;
  9.                
  10.                 public function MyPoint ()
  11.                 {
  12.                         _point = new Point();
  13.                 }
  14.                
  15.                 public function set x (v:Number):void
  16.                 {
  17.                         _point.x = v;
  18.                 }
  19.                 public function get x ():Number
  20.                 {
  21.                         return _point.x;
  22.                 }
  23.                
  24.                
  25.                 public function set y (v:Number):void
  26.                 {
  27.                         _point.y = v;
  28.                 }
  29.                 public function get y ():Number
  30.                 {
  31.                         return _point.y;
  32.                 }
  33.                
  34.         }
  35. }

Делегация в данном случае не оправдана, так как класс MyPoint нельзя будет использовать в методах работающих с Point. Вокруг стандартных методов придётся писать обёртки или использовать преобразование.

Пример преобразования:

  1. var Rect:Rectangle = new Rectangle(0,0, 100, 100);
  2. Rect.offsetPoint( new Point(myPoint.x, myPoint.y) );

Пример обертки:

  1. package
  2. {
  3.         import flash.geom.Rectangle;
  4.         import flash.geom.Point;
  5.  
  6.         public class MyRectangle extends Rectangle
  7.         {