PDA

Просмотр полной версии : FLashdevelop + Ant + source-path


Samuel_D
05.07.2012, 11:22
Ошибка : сборка происходит только если build.xml открыт в Flashdevelop и его вкладка активна, иначе ошибка : "Не удалось открыть "src"".

Что делаю :
Создаю новый большой проект под Flashdevelop + Ant. Для теста создал build.xml :

<project name="project" basedir="." default="build_app">

<property file="${user.home}\ant\project.properties"/>
<taskdef resource="flexTasks.tasks" classpath="lib/flexTasks.jar"></taskdef>
<property name="PROJECT_NAME" value="SOME_NAME"></property>
<property name="APP_ROOT" value=""></property>
<property name="SOURCE_DIR" value="${APP_ROOT}src\"></property>
<property name="DEPLOY_DIR" value="${APP_ROOT}bin\"></property>

<target name="loader">
<mxmlc file="${SOURCE_DIR}Loader.as" output="${DEPLOY_DIR}\loader.swf" incremental="true">
<debug>false</debug>
<load-config filename="${FLEX_HOME}/frameworks/flex-config.xml"></load-config>
<source-path path-element="${FLEX_HOME}/frameworks"></source-path>
<static-link-runtime-shared-libraries>true</static-link-runtime-shared-libraries>
</mxmlc>
</target>

</project>

И все было хорошо пока я не решил что пора разносить все по пакетам, для начала добавил новую переменную LOADER_DIR и прописал пакет в Loader.as -> package project.loader :

<project name="SOME_NAME" basedir="." default="build_app">

<property file="${user.home}\ant\project.properties"/>
<taskdef resource="flexTasks.tasks" classpath="lib/flexTasks.jar"></taskdef>
<property name="project" value="SOME_NAME"></property>
<property name="APP_ROOT" value=""></property>
<property name="SOURCE_DIR" value="${APP_ROOT}src"></property>
<property name="LOADER_DIR" value="${SOURCE_DIR}\${PROJECT_NAME}\loader\"></property>
<property name="DEPLOY_DIR" value="${APP_ROOT}bin\${PROJECT_NAME}\"></property>

<target name="loader">
<mxmlc file="${LOADER_DIR}Loader.as" output="${DEPLOY_DIR}\loader.swf" incremental="true">
<debug>false</debug>
<load-config filename="${FLEX_HOME}/frameworks/flex-config.xml"></load-config>
<source-path path-element="${FLEX_HOME}/frameworks"></source-path>
<static-link-runtime-shared-libraries>true</static-link-runtime-shared-libraries>
</mxmlc>
</target>

</project>

Нарвался на ошибку :

Ошибка: Файл, найденный по исходному пути, должен иметь структуру пакета "", идентичную пакету определения "project.loader".

решил ее добавив в build.xml след. строку :
<source-path path-element="${SOURCE_DIR}"></source-path>

теперь все хорошо работает, но при условии что в Flashdevelop открыт build.xml для редактирования и обязательно закладка с кодом build.xml должна быть активной, иначе ошибка :
Не удалось открыть "src"

Кто знает в чем проблема ? А то совсем не по приколу перед каждой компиляцией открывать закладку с build.xml а потом назад к коду.

P.S. Flashdevelop 4.0.4 + Apache Ant 1.8.4 + Ant plugin for FD4

Котяра
05.07.2012, 13:26
Когда вызываешь Test Project в FD из кода ты не вызываешь сборку антом - сборка идёт по дефолтным настройкам FD. Копай в ту сторону.

Samuel_D
05.07.2012, 13:38
Котяра, спасибо, но проблема не в этом. Я сборку выполняю через Ant plugin for FD4 а не через FD, т.е. в панели Ant выбираю нужный target и вызываю "Run target".

P.S. прошу прощение, но как оказалось все намного глубже и по своей оплошности я не обратил внимание что эта проблема была всегда. Я начал с нуля и увидел что проблема не в пакетах, а в чем-то другом.
Вот новый build.xml - ничего сложного, но и он не хочет работать как надо, может это проблема плагина ? есть кто-то кто работает с Ant plugin for FD4 ? или всетаки я чего-то не дописал в build.xml.
<?xml version="1.0" encoding="UTF-8"?>
<project name="compile-and-reduce" default="default" basedir="../">
<condition property="exe" value=".exe">
<os family="windows"/>
</condition>
<condition property="exe" value="">
<os family="unix"/>
</condition>

<property name="dir.build" value="${basedir}/build"/>
<property file="${user.home}/ant/build.properties"/>
<property name="dir.src" value="${basedir}/src"/>
<property name="dir.bin" value="${basedir}/bin"/>

<property name="file.swf" value="test.swf"/>
<property name="file.main" value="Main.as"/>

<target name="compile">
<exec executable="${flex.mxmlc}">
<arg line="-define=CONFIG::Debug,false"/>
<arg line="-define+=CONFIG::Release,true"/>
<arg line="-strict"/>
<arg line="-optimize"/>
<arg line="-debug=false"/>
<arg line="-static-link-runtime-shared-libraries"/>
<arg line="-o '${dir.bin}/${file.swf}'"/>
<arg line="-el '${flex.libs}/player/10.0/playerglobal.swc'"/>
<arg line="-sp '${dir.src}'"/>
<arg line="-- '${dir.src}/${file.main}.as'"/>
</exec>
</target>

</project>


Добавлено через 29 минут
Все-таки build.xml :

<?xml version="1.0" encoding="UTF-8"?>
<project name="compile-and-reduce" default="default" basedir="../">
<condition property="exe" value=".exe">
<os family="windows"/>
</condition>
<condition property="exe" value="">
<os family="unix"/>
</condition>

<property name="dir.build" value="${basedir}/build"/>
<property file="${user.home}/ant/build.properties"/>
<property name="dir.src" value="${basedir}/src"/>
<property name="dir.bin" value="${basedir}/bin"/>

<property name="file.swf" value="test.swf"/>
<property name="file.main" value="Main.as"/>

<target name="compile">
<exec executable="${flex.mxmlc}">
<arg line="-define=CONFIG::Debug,false"/>
<arg line="-define+=CONFIG::Release,true"/>
<arg line="-strict"/>
<arg line="-optimize"/>
<arg line="-debug=false"/>
<arg line="-static-link-runtime-shared-libraries"/>
<arg line="-o '${dir.bin}/${file.swf}'"/>
<arg line="-el '${flex.libs}/player/10.0/playerglobal.swc'"/>
<arg line="-sp '${dir.src}'"/>
<arg line="-- '${dir.src}/${file.main}.as'"/>
</exec>
</target>

</project>


Всем спасибо, все работает.

Котяра
05.07.2012, 16:23
Я бы ещё задал не default="default" а default="compile"
чтобы в консоли (мало ли) вызывать просто
ant

Samuel_D
05.07.2012, 17:26
Котяра, спасибо, так и сделал.

Но теперь не могу вынести Main.as в пакет (package project.loader) :
Ошибка: Файл, найденный по исходному пути, должен иметь структуру пакета "loader", идентичную пакету определения "project.loader".