← All posts tagged Maven

yzh44yzh
Maven С транзитивными зависимостями есть одна тонкая проблема. Допустим, вы решили отказаться от одного устаревшего модуля, заменив его более свежим. То есть, нужно убрать все зависимости от старого артефакта, а добавить от нового.

Так вот, убрать все зависимости не так просто :) Вроде все убрал, а обращения к объектам старого модуля все равно компилируются. Значит артефакт все равно подключен где-то через транзитивные зависимости. Может даже через артефакты из других проектов.

В общем-то большой беды нет в том, что какой-то ненужный артефакт будет торчать подключенным. Но хотелось бы убрать, дабы гарантировать, что никто не будет случайно использовать классы из obsolete модуля.
yzh44yzh
Maven вот что мне не нравится в Nexus-сервере, это то, что когда я спрашиваю у него:
— какие у тебя есть артефакты для работы с JSON?
он мне отвечает:
— Too many results, please refine the search condition

Блин, нет бы показать хоть какие-нибудь из этих results. Откуда я знаю, как мне refine search condition? Я понятия не имею, что там есть за либы. Я хочу посмотреть весь список )
yzh44yzh
Maven Flexmojos Есть еще вариант собрать AS3 либу в swc файл без всякого mvn, используя mxmlc напрямую. А потом сделать mvn install:install-file

Так, может, и лучше.
yzh44yzh
Maven Flexmojos продолжение #1412544

Типа положить pom1.xml и pom2.xml у которых родителями будут разные super pom, а для сборки положить shell-скрипт, который будет делать типа такого:
cp pom1.xml pom.xml
M2_HOME=/usr/local/apache-maven-2.2.1/
$M2_HOME/bin/mvn install

cp pom2.xml pom.xml
M2_HOME=/usr/local/apache-maven-3.0.3/
$M2_HOME/bin/mvn install

(да, их еще и разными версиями maven нужно собирать) :D
yzh44yzh
Maven Подымаю очередной проект, и понимаю, что штука эта неплохая. Но очень докучает то, что чистые AS либы, которым не нужна привязка к flex sdk, привязываются к нему. И если либа собрана под 4.1, то ее нельзя подключить в проекте 3.5, и наоборот.

Надо придумать какое-нибудь извращение, чтобы в модуле либы можно было легко подменять pom и собирать ее и так и эдак, с разными номерами версий.
yzh44yzh
Maven Flexmojos Проблема такая вылазила раньше, но я, вроде бы, не писал, как ее решать.

Допустим у вас есть некий модуль на чистом AS3, без зависмостей от флекса. Но flexmojos устроен так, что при сборке этого модуля зависимость в swc все равно пропишется. Допустим, от 4-го SDK

И вот вы хотите использовать этот модуль в проекте с 3-м SDK, и проект не собирается.

Тогда нужно, подключая зависимость от данного модуля, указать exclusions, вот так:
<dependency>
<artifactId>error</artifactId>
<groupId>com.flashdevs.fdm</groupId>
<version>4.0.1</version>
<type>swc</type>
<exclusions>
<exclusion>
<artifactId>flex-framework</artifactId>
<groupId>com.adobe.flex.framework</groupId>
</exclusion>
</exclusions>
</dependency>
и все собирается нормально
yzh44yzh
Maven За год уже примерно в 4й раз на виндошной машине возникает проблема, что артефакт в репозитории лежит, а мавен его в упор не видит. Обычно помогает удаление артефакта вручную и установка его заново.
yzh44yzh
Maven А вообще мавен — фигня. Слишком сложноуправляемый и непредсказуемый тул. Постоянно чего-нибудь не работает, постоянно нужен траблшутинг.

Единственное его достоинство — интеграция с IDEA.

Как подвернется небольшой новый проект, попробую для него Ant-билд сделать.
yzh44yzh
Maven Насчет обратной совместимости вроде бы не соврали — maven 3 билдит мои проекты. И впрямь быстрее. Надо будет и на работе обновиться.
yzh44yzh
Maven Есть у меня проблемы с поиском артефактов.

Например, вижу в коде такое:
import org.apache.commons.collections.iterators.ArrayIterator;
как мне узнать, какой артефакт подключить, чтобы эта зависимость разрешилась?

Еще Nexus, гад почему-то не ищет по groupId, а только по artefactId. А я из данного кода могу предположить, что groupId будет содержать org.apache.commons. А вот насчет artefactId ничего не могу предположить. Но вбей в поиске в Nexus org.apache.commons и получишь фигу, Nexus вообще ничего не выдаст :(

В итоге я даже не знаю, с какого боку взяться в поисках нужного артефакта.
yzh44yzh
Maven Практически любой, кто начинает использовать maven, рано или поздно (скорее рано) сталкивается со стандартной проблемой #950241 , задает стандартный вопрос и получает стандартный ответ.

В моем тиме с этим столкнулись все :)
yzh44yzh
Maven Ищу во внутреннем Nexus репозитории, какой артефакт нужен, чтобы подключить springframework. Вбиваю в поиск springframework, а он мне — Too many results, please refine the search condition.

Блин, ну откуда я знаю, как тебе refine? И хоть бы один из этих Too many показал. Придется спрашивать у гугла.
yzh44yzh
Maven Flexmojos Задумал я тут вынести фонты (да и вообще стили) в отдельный swf файл, загружаемый в рантайме как описано здесь: livedocs.adobe.com

Оказалось, что flexmojos сильно смущает тот момент, что я указываю Fonts.css как главный класс приложения :) Настолько сильно, что он выбрасывает NullPointerException и сдается.

Ну не беда, можно собрать этот модуль баш-скриптом

#!/bin/bash
cd /home/yura/p/fourthday/fonts/src/main/resources
/home/yura/dev/flex_sdk_4.0.0.14159/bin/mxmlc Fonts.css
mv Fonts.swf /home/yura/www/fourthday/swf/fonts.swf

Чем хорош этот скрипт? Тем, что он собирает модуль и выдает таки нужный swf. Чем плох? Тем, что в нем зашиты абсолютные пути и его не запустишь на любой машине. Ну придется с этим мириться.
yzh44yzh
Maven IDEA Mac Из IDEA Maven не запускается (запускаю из консоли). IDEA просит задать переменную окружения M2_HOME или явно указать пусть к мавен в настройках. Причем у меня сделано и то, и другое, но IDEA упорно этого не замечает.
yzh44yzh
Maven IDEA Scala Настроил многомодульный flex-scala проект под maven. Оказалось не сложно. Иерархия pom получилась такая:
— project pom
--- super-pom-scala
------ scala-module-A
------ scala-module-B
--- super-pom-flex
------ flex-module-A
Однако древовидная иерархия pom реализована в линейной структуре каталогов:
--- project-root
------ super-pom-scala
------ super-pom-flex
------ scala-module-A
------ scala-module-B
------ flex-module-A

Поддержка scala в IDEA довольно хреновая. Настройки модулей из помов не подымаются, их все равно нужно вручную настраивать, добывать все jar-зависимости и указывать их отдельно, несмотря на то, что все зависимости указаны в pom.

Scala facet сам не настраивается, и настроеный вручную не работает. Несмотря на то, что scala-compiler.jar и scala-library.jar указаны в фасете, их все равно нужно явно добавлять в зависимости каждого модуля.

Scala парсер оставляет желать лучшего: автокомплит работает не везде, необъявленные переменные не подсвечивает, замечаешь их только получив ошибку при компиляции.

Но в целом ничего, работать можно.
yzh44yzh
Maven Scala Goal:scala:cc "Compile the main and test scala source directory in continuous (infinite loop). !! This is an util goal for commandline usage only (Do not use or call it in a pom) !!!"

Пытаюсь представить, зачем это нужно... )