Как стать автором
Обновить
14
0.1
Stanislav Spiridonov @foal

Человек

Отправить сообщение

Да, вот только, из вашего примера не было ясно, что в дочерних помах нету ссылок на родителя — только структура каталогов — а она как раз самая, что ни на есть классическая :) Что касается наследования и агрегирования, то мне ближе наследование между иерархией (деревом) супер помов и проектами (пример 1), тогда как внутри проектов я предпочитаю комбинацию агрегирования и наследования, как в 5 примере.

Да, конечно, проект может иметь несколько уровней вложенности, например, https://bitbucket.org/JRS/open-flexess/src. Но я и в этом случае придерживаюсь правила — создавать каталог для узловых "pom" файлов по причинам, изложенным выше в статье. Но у вашего варианта есть одно большое преимущество — он стандартный :)

Спасибо за статью. Есть у меня одно замечание по поводу зависимости com.google.dagger:dagger-compiler:2.0. Для Dagger‡ и других APT-based продуктов лучше пользоваться gradle-apt-plugin. Это сделает компиляцию вашего проекта более прозрачной и безопасной, так как не будут путаться два разных classpath'а — один для компиляции вашего кода и второй для его генерации.

Сейчас всё намного приятнее:


  • лямды, стримы (Java8)
  • injection (GIN, Dagger 2)
  • REST API (RestyGWT)
  • доступ к любой JS библиотеке путём написания простйшего интефейса (JS Interop). При прямых руках и еще небольшом усиилии из Java даже проще.

Например JavaScript


var builder = new StarWebPrintBuilder();
var request = '';
request += builder.createInitializationElement();
request += builder.createTextElement({characterspace:2});
request += builder.createAlignmentElement({position:'right'});
request += builder.createLogoElement({number:1});
request += builder.createTextElement({data:'TEL 9999-99-9999\n'});
request += builder.createAlignmentElement({position:'left'});
request += builder.createTextElement({data:'\n'});
request += builder.createTextElement({data:'Apple                $20.00\n'});
request += builder.createTextElement({emphasis:true});
request += builder.createTextElement({width:2, data:'Total'});
request += builder.createTextElement({width:1, data:'   '});
request += builder.createTextElement({width:2, data:'$210.00\n'});
request += builder.createTextElement({width:1});
request += builder.createTextElement({emphasis:false});
request += builder.createTextElement({data:'\n'});
request += builder.createCutPaperElement({feed:true});

Тот же код из Java (JS Interop)


StarWebPrintBuilder builder = new StarWebPrintBuilder();
String request = new StringBuilder()
.append(builder.createInitializationElement(new Iep()))
.append(builder.createTextElement(new Tep() {{ characterspace = 2; }}))
.append(builder.createAlignmentElement(new Aep() {{ position = "right"; }}))
.append(builder.createLogoElement(new Lep() {{ number = 1;}}))
.append(builder.createTextElement(new Tep() {{ data = "TEL 9999-99-9999\n"; }}))
.append(builder.createAlignmentElement(new Aep() {{ position = "left"; }}))
.append(builder.createTextElement(new Tep() {{ data = "\n"; }}))
.append(builder.createTextElement(new Tep() {{ data = "Apple          $20.00\n"; }}))
.append(builder.createTextElement(new Tep() {{ emphasis = true; }}))
.append(builder.createTextElement(new Tep() {{ width = 2; data = "Total"; }}))
.append(builder.createTextElement(new Tep() {{ width = 1; data = "   "; }}))
.append(builder.createTextElement(new Tep() {{ width = 2; data = "$210.00\n"; }}))
.append(builder.createTextElement(new Tep() {{ width = 1; }}))
.append(builder.createTextElement(new Tep() {{ emphasis = false; }}))
.append(builder.createTextElement(new Tep() {{ data = "\n"; }}))
.append(builder.createCutPaperElement(new Cpep() {{ feed = true; }}))
 .toString();

Тот же код из Java (JS Interop + Custom builder on Java)


String request = new GwtPrintBuilder()
     .init()
     .text(characterSpace(2))
     .align(right)
     .logo(number(1))
     .text("TEL 9999-99-9999")
     .align(left)
     .text(line())
     .text("Apple", "$20.00", lineLengt)
     .text(emphasis(true))
     .text("Total", "210.00", lineLengt, 2)
     .text(emphasis(false))
     .text(line())
     .cut(feed(true))
     .build();
Немного устаревшие данные. Последний релиз поддерживает и Java 9, правда только как компилятор. Языковые конструкции обещают в следующем релизе. Т.е. сейчас можно писать на Java 8 и это скомпилируется Java SDK 9. Но статься не об этом :)
Причина тривиальна — это мой пост из песочницы 2-х давности. Тогда GWT не умела лямды.

Да, репозитории в помах это еще та чехарда — при большом количестве проектов и длинной истории могут создавать вполне реальные проблемы. Я для себя со временем пришел к такому решению — на рабочий комп ставится sonatype nexus (maven repository), a settings.xml содержит единственную запись:


    <mirrors>
        <mirror>
            <!--This sends everything else to /public -->
            <id>lnexus</id>
            <mirrorOf>*</mirrorOf>
            <url>http://localhost:8081/repository/public</url>
        </mirror>
    </mirrors>

Сначала о недостатках — репозиторий отбирает часть ресурсов у компа, особенно место на диске. Но это достаточно просто нивелируется железом. Достаточно сказать, что я полгода не замечал фоновый WebSphere Full Profile + Liferay + Application (забыл выключить после смены проекта), чтобы понять, что этот недостаток не так существеннен.


Теперь о достоинствах:


  • весь роутинг — мои репозитории + OSS репозитории + проектовые репозитории управляются через nexus (Web UI), что гораздо удобнее чем руками в XML
  • мне не надо теперь иметь несколько settings.xml (для работы и для себя). Nexus автоматически отслеживает доступность репозиториев и автоматически их подключает.
  • оптимизация трафика — Nexus "умнее" общается с удалёнными репозиториями
  • локальный репозиторий (не nexus) со временем забивается мусором, но в моём случае это не важно — я легко могу его стереть — всё нужное моментально восстановится из nexus

Мне помог Mommox. В принципе, любой спрей с мометазона фуроатем. Правда, у нас он только по рецепту. Действует не сразу, но после 3-4 недель я забыл о нафтизине (до этого заснуть без него не мог). Главное поверить врачу и пережить первые 2-3 недели.

1. Я возможно вас обижу, наверное, но сложная иерархия в многомодульных проектах часто возникает из-за ошибок проектирования, а с простой иерархией maven справляется на раз.
2. Ничего не могу сказать — вполне возможно, что это и так. Я документацию не генерирую, а когда приходилось по работе (проект из 10-20 модулей) никогда проблем не было. Правда мы её настраивать не пытались :) Результат «из коробки» нас вполне устроил.
3. Не очень понял :) Куда положить? У меня проекты через 2-3 транзитивные зависимости вполне внятно работают с исходниками (для GWT надо) Где организовать? IDE сама разбирается, CI сервер тоже (хотя я это сейчас не использую)
4. Можно, но сложно (очень сложно) — и это плюс IMHO
5. А вот тут я с вами соглашусь, пожалуй. Maven это только для Java.
Да, есть такая буква. Properry нельзя импортировать. Как и настройки билда, плагинов. А версии то почему нет? С правильного BOM'а подтянутся все версии сами. Надо лишь указать правильную версию самого BOM'а.
Ну вот нет у меня этих аргументов. Не сердитесь :) Просто maven это инструмент, который меня пока сильно не подводил. Что бы понять билд чужого проекта надо просто знать мавен, а не заниматься reverse engineering. Я не говорю, о том, как вносить исправления — ведь для этого придётся не просто понять, что делает данный скрипт, но и зачем он это делает, и какая идея за этим стоит.
В то время как у maven модель фиксированная, что значительно облегчает работу с проектами. Опять же юниор на проекте не успееет много сломать. Можно вовремя его поправить.
Честно говоря — нет у меня такого опыта, первое, что я сделал, когда смотрел на spring boot, это можно ли его использовать без их parent POM. Оказалось, что да, и дальше я не копал :)
А… Ну хорошо, что он её нашел. Я же писал, в основном, для тех, кто продолжает «мучиться» с maven по разным причинам. Кому-то он достался в наследство, кто-то сделал осознанный выбор и использует maven или Gradle не потому, что кому-то «должен», а просто потому, что своя голова на плечах есть.
Так, а я о чём? :) Gradle отличный продукт, и не от балды его придумали, а пытаясь решить реальные проблемы. Скорее всего вызванные попыткой «сделать нестандартное». Вот только, для меня сам факт таких проблем, это звоночек, что я делаю, что-то не совсем так и повод решить возникшую проблему немного иначе. A нестандартных подходов я видел много, ещё когда с ANT работал. И всё хорошо, когда сам пишешь этот скрипт, но вот когда его пишет кто-то другой, а тебе надо кусочек поправить. Кто сталкивался, тот поймёт.
Хорошая идея, но есть несколько причин, почему я им пока не пользуюсь. Это поддержка, точнее её отсутствие, в Eclipse. Плюс, как-то у меня не получилось сходу подобрать правильный диалект, который бы мне понравился. Ну и для статьи, по любому, лучше использовать native language, то есть XML.
На вкус и цвет все фломастеры разные :) Вот тут мой ответ на твит от @CedricChampeau. Кратко — Maven мне нравится своей стройной моделью проекта. Я считаю, что рамки, которая она накладывает, это плюс, а не минус.
Ну вот, вы всё запутали :) Aутентификация — проверка того, что идетифицированный субъект, есть тот за кого себя выдает. До прав еще не дошли. Контроль доступа (access approval, access control или enforcement) проверка при действии субъекта на наличие у него прав на это действие, то что часто и, не совсем правильно, называют авторизацией по-русски.
“I have less friends than you” волне корректно если говорящий подрузамевает не количество вешей, а их, скажем так, совокупный объём. Поясню на примере:
I have a little amount of friends. -> I have less amount of friends than you. -> I have less friends than you.

Скорее это будет работать, как лишний стимул воспользоваться платной дорогой — IMHO, их владельцы будут в числе первых, кто пройдёт эту "сертификацю".

Никак. Ключевая фраза "в установленных геозонах и/или дорожных условиях автомобиль двигается совершенно автономно". Как я понимаю, на не "сертифицированной" дороге это обычный автомобиль.

Информация

В рейтинге
2 430-й
Откуда
Praha, Hlavni Mesto Praha, Чехия
Дата рождения
Зарегистрирован
Активность