Все технические форумы на одном сайте Удобный поиск информации с популярных форумов в одном месте
Вопрос: maven multimodule layout - best practices

Всегда использовали maven и module'и как data, business, web. Решил что лучше разбивать на модули по логике:
Код

product (модуль)
  .entity  (пакеты)
  .service
  .controller

billing
  .entity
  .bank
  .service

Но мне в billing нужны будут entity из product модуля (и на оборот). Как тогда избежать circular dependency? Какой подход вы используете ?


Ответ:
Создай коммон проект в который и поскладируй энтити, а остальным 2-м пропиши зависимости на него
Вопрос: Пятничный Best practices.

Добрый день, коллеги!

Вот такой вот пятничный говнокодец.

Очень часто нужно сортировать сущности в коллекциях по разным колонкам.
В настоящий момент это уродство выглядит вот так.

Entity.java
+

import java.math.BigDecimal;
import java.math.BigInteger;
import java.util.Date;

public class FuckenEntity {

    private BigInteger account;
    private String clientName;
    private Date clientActivityDate;
    private String clientSubType;
    private BigDecimal clientBalance;

    public BigInteger getAccount() {
        return account;
    }

    public void setAccount(BigInteger account) {
        this.account = account;
    }

    public String getClientName() {
        return clientName;
    }

    public void setClientName(String clientName) {
        this.clientName = clientName;
    }

    public Date getClientActivityDate() {
        return clientActivityDate;
    }

    public void setClientActivityDate(Date clientActivityDate) {
        this.clientActivityDate = clientActivityDate;
    }

    public String getClientSubType() {
        return clientSubType;
    }

    public void setClientSubType(String clientSubType) {
        this.clientSubType = clientSubType;
    }

    public BigDecimal getClientBalance() {
        return clientBalance;
    }

    public void setClientBalance(BigDecimal clientBalance) {
        this.clientBalance = clientBalance;
    }
}


SortProcessor
+
import org.apache.log4j.Logger;
import org.springframework.beans.factory.BeanNameAware;

import java.util.Collections;
import java.util.Comparator;
import java.util.List;

import static java.lang.String.format;
import static java.lang.String.format;

public class FuckenEntityProcessor implements BeanNameAware {

    private static Logger logger = Logger.getLogger(FuckenEntityProcessor.class);

    /**
     *
     * @param FuckenEntitys - fucken collection to sort (out)
     * @param nField - number of field (Just like SELECT .... FROM ... ORDER by nField )
     * @param direction - direction of sorting like { ASC | DESC }
     */
    public static void sort(List<FuckenEntity> FuckenEntitys, int nField, int direction) {
        if (direction == 0 || direction == 1) {
            if (FuckenEntitys != null && FuckenEntitys.size() > 0) {
                try {
                    if (nField == 0) {
                        Collections.sort(FuckenEntitys, new Comparator<FuckenEntity>() {
                            @Override
                            public int compare(FuckenEntity o1, FuckenEntity o2) {
                                if (o1.getAccount()==null && o2.getAccount()==null) return 0;
                                if (o1.getAccount()==null) return 1;
                                if (o2.getAccount()==null) return -1;
                                return o1.getAccount().compareTo(o2.getAccount());
                            }
                        });
                    } else if (nField == 1) {
                        Collections.sort(FuckenEntitys, new Comparator<FuckenEntity>() {
                            @Override
                            public int compare(FuckenEntity o1, FuckenEntity o2) {
                                if (o1.getClientName()==null && o2.getClientName()==null) return 0;
                                if (o1.getClientName()==null) return 1;
                                if (o2.getClientName()==null) return -1;
                                return o1.getClientName().compareTo(o2.getClientName());
                            }
                        });
                    } else if (nField == 2) {
                        Collections.sort(FuckenEntitys, new Comparator<FuckenEntity>() {
                            @Override
                            public int compare(FuckenEntity o1, FuckenEntity o2) {
                                if (o1.getClientActivityDate()==null && o2.getClientActivityDate()==null) return 0;
                                if (o1.getClientActivityDate()==null) return 1;
                                if (o2.getClientActivityDate()==null) return -1;
                                return o1.getClientActivityDate().compareTo(o2.getClientActivityDate());
                            }
                        });
                    } else if (nField == 3) {
                        Collections.sort(FuckenEntitys, new Comparator<FuckenEntity>() {
                            @Override
                            public int compare(FuckenEntity o1, FuckenEntity o2) {
                                if (o1.getClientSubType()==null && o2.getClientSubType()==null) return 0;
                                if (o1.getClientSubType()==null) return 1;
                                if (o2.getClientSubType()==null) return -1;
                                return o1.getClientSubType().compareTo(o2.getClientSubType());
                            }
                        });
                    } else if (nField == 4) {
                        Collections.sort(FuckenEntitys, new Comparator<FuckenEntity>() {
                            @Override
                            public int compare(FuckenEntity o1, FuckenEntity o2) {
                                if (o1.getClientBalance()==null && o2.getClientBalance()==null) return 0;
                                if (o1.getClientBalance()==null) return 1;
                                if (o2.getClientBalance()==null) return -1;
                                return o1.getClientBalance().compareTo(o2.getClientBalance());
                            }
                        });
                    }
                    if (direction==1) Collections.reverse(FuckenEntitys);
                } catch (Exception ex) {
                    logger.error(
                            format("Exception while sorting FuckenEntitys param = %d,dir = %d",
                                    nField, direction), ex
                    );
                }
            }
        }
    }

    ................
}


Обычно List<entity> связана 1:1 с GWT FlexTable и отображается на UI пользователя
как есть.

Сортировать на стороне источника данных не всегда возможно. Где БД - мы
как-то сортируем а вот из rest-сервисов приходится делать всё самим.

Встроенные DBMS (Derby, HyperSonic, H2) мы не используем.

Сами entities лежат в скоупе GWT компилляции и имеют поля только основных
примитивных типов (int, String, Date, BigDecimal). Сложные объекты
я пока не встречал.

Вопрос:

Как сортировать универсально?

Нужен какой-то компонент (SpringBean) которому на вход приходит
неизвестная коллекция List<Object> и номер колонки и direction (ASC|DESC)
по которой надо сортировать и на выходе мы имеет отсортированное.

Буду рад выслушать идеи, Best Practices и почитать исходники.

Спасибо!

P.S. Реверс тоже радует :)

P.P.S Фух. Написал таки. Пятница ... мать ее так.
Ответ:
Monochromatique
Alexey Tomin
пропущено...
Иди из нашего кошмара в свой- установки MS серверов и совместимости версия дотнета :)


Да как бы нет проблем. ))

Но как-то хотелось думать (не приведи Бог столкнуться), что в JAVA есть эквивалент - persons.OrderBy(p=>p.name)


Будет в JDK8

Monochromatique
На что я кстати и привел ссылку. Просто ты наверное не понял.


Я не понял, что ты этим хотел сказать, да :)
Вопрос: Apache Curator - как(best practices)?

Здравствуйте, пытаюсь организовать работу многих "micro services" которые должны находится в облаке. Не знаю правильно ли сформулировал, так как только начинаю вникать в данные понятия..
Суть вопроса(ов). Понять с чем и как кушать.
С офф сайта и не многочисленных примеров, пытаюсь собрать все воедино.

1. Где посмотреть пример сервиса который бы служил центральным регистратором бл* всех "micro services"? Это самый обычный maven-project который регистрирует сервис при к примеру таком вызове? "host:8080/centralService"?

2. Правильно ли я понимаю, что каждый "micro service" при старте должен просто регистрироваться у главного сервиса, а все другие сервисы обращаться к главному, а он дальше перенаправляет.

3. Какие нить tipps...

Спасибо
Ответ: 1. www.consul.io
2. почти. микросервис при старте шлет на главный свой ip/port и healthcheck. клиент микросервиса запрашивает у главного ip/port по имени сервиса и работает с ним
3. динамика п.2 накладывает некоторые обязанности - клиент микросервиса обязан уметь реагировать на падение микросервиса/изменение его ip в главном сервисе.
Вопрос: Java Web App best practices. Поделитесь опытом

Добрый день.
Интенсивно осваиваю web-разработку на java.
Не хотелось бы проходить уже истоптанный путь для выявления практик "как делать не надо", или "нормальные web-программисты так не делают".

Есть конкретные вопросы.
Говорят что томкат не сильно подходит в качестве веб-сервера (для отдачи статических страниц). Он работать будет, но эту функциональность на него лучше не вешать. Слышал что веб-сервер лучше развертывать на апаче, а томкат использовать как контент-сервер, для получения диначиеских. Так ли это? В каких случаях эти утверждения верны, а в каких нет? Лучше сразу делать акцент на эту концепцию, или всегда можно перепрыгнуть на доп. сервер если потребуется?
Далее... JSP. У меня сформировалось мнение что корректнее использовать AJAX который будет делать запросы к сервлетам и получать ответы в JSON, чем строить JSP-страницы на стороне сервера... Мне кажется это более масштабируемый подход, и его проще поддерживать. Я могу оказаться не прав, ведь для меня это новая тема.
Если я не прав, то чему нужно отдавать приоритет при связке динамического контента со страницей?


Где можно почитать про best practices в этом направлении? Гугл выдает либо старые статьи, либо написанные "потому что надо было что-то написать". Интересуют реально полезные ресурсы.
Спасибо.
Ответ: klopik, Спорное утверждение.
Например, glassfish - тоже reference implementation для J2EE, но им мало кто пользуется.
Вопрос: validation enrichment best practices

Коллеги, может кто натолкнет на мысль.

Есть некоторый сервис который выполняет проверку введенных данных, собирает структуры и через DAO модуль все это добро пишет в базу.
Так вот, писать всю логику в одном сервисном методе не хочется. Есть желание разделить на части как то: валидация пришедших данных(если инвалидны, сразу выбросить фолт), сбор данных из конверта, конвертация в доменные объекты и сохранение их.

Так вот, если присмотреться то валидация и сбор данных фактически выполняют схожие операции (итерирует по структурам, и проводит некоторые подсчеты, которые используются для проврерки инвариантности и при дальнейшем построении доменных объектов).

Что то из валидаторов возвращать плохо, это не их задача. Отдельно собирать необходимые данные - тоже коряво - потому как валидатор тоже делает итерирование по данным и можно было бы и там собрать значения.

Может кто сталкивался? Или какой паттерн есть для таких случаев?

ЗЫ: не 100% относится к Java конечно, но поскольку именно эта платформа используется для разработки то вопрос размещаю здесь.
Ответ:
Если спрашиваешь, разделять ли валидацию от заполнения, то конечно разделять. И это нормально, входная валидация никогда не будет полной, вторая часть в самой суровой логике и данных необходима, и отделять ее от входной валидации тоже хорошо. Хотя это уже называется "ошибки процессинга", но суть та же.
Вопрос: NetBeans vs Maven не получается

Добрый день коллеги, я вас наверно уже всех достал.
Ну не получается у меня не знаю я что делать.
Скачал и поставил
C:\Users\vvf6426\.m2\repository\apache-maven-3.3.3\

Переменные среды заполнил, вроде правильно.
C:\Users\vvf6426>mvn -version
Apache Maven 3.3.3 (7994120775791599e205a5524ec3e0dfe41d4a06; 2015-04-22T14:57:3
7+03:00)
Maven home: C:\Users\vvf6426\.m2\repository\apache-maven-3.3.3
Java version: 1.8.0_45, vendor: Oracle Corporation
Java home: C:\Program Files\Java\jdk1.8.0_45\jre
Default locale: ru_RU, platform encoding: Cp1251
OS name: "windows 7", version: "6.1", arch: "amd64", family: "dos"


settings.xml в обоих местах одинаковый :
  <proxies>
  <!-- proxy
     | Specification for one proxy, to be used in connecting to the network.
     |-->
    <proxy>
      <id>optional</id>
      <active>true</active>
      <protocol>http</protocol>
      <username>proxyuser</username>
      <password>proxypass</password>
      <host>proxy.host.net</host>
      <port>80</port>
      <nonProxyHosts>local.net|some.host.com</nonProxyHosts>
    </proxy>
    
  </proxies>





  <proxies>
<!--      proxy
     | Specification for one proxy, to be used in connecting to the network.
     |-->
    <proxy>
      <id>optional</id>
      <active>true</active>
      <protocol>http</protocol>
      <username>proxyuser</username>
      <password>proxypass</password>
      <host>proxy.host.net</host>
      <port>80</port>
      <nonProxyHosts>local.net|some.host.com</nonProxyHosts>
    </proxy> 
  </proxies>


Ошибку возникает при создании веб приложения Мавен:
+
cd C:\Users\vvf6426\Documents\NetBeansProjects; "JAVA_HOME=C:\\Program Files\\Java\\jdk1.8.0_45" cmd /c "\"\"C:\\Program Files\\NetBeans 8.0.2\\java\\maven\\bin\\mvn.bat\" -DarchetypeGroupId=org.codehaus.mojo.archetypes -DarchetypeArtifactId=webapp-javaee7 -DarchetypeVersion=1.1 -DarchetypeRepository=http://repo.maven.apache.org/maven2 -DgroupId=com.mycompany -DartifactId=corelation -Dversion=1.0-SNAPSHOT -Dpackage=com.mycompany.corelation -Dbasedir=C:\\Users\\vvf6426\\Documents\\NetBeansProjects -Darchetype.interactive=false -Dmaven.ext.class.path=\"C:\\Program Files\\NetBeans 8.0.2\\java\\maven-nblib\\netbeans-eventspy.jar\" --batch-mode archetype:generate\""
Scanning for projects...
Downloading: http://repo.maven.apache.org/maven2/org/apache/maven/plugins/maven-clean-plugin/2.4.1/maven-clean-plugin-2.4.1.pom
Failed to retrieve plugin descriptor for org.apache.maven.plugins:maven-clean-plugin:2.4.1: Plugin org.apache.maven.plugins:maven-clean-plugin:2.4.1 or one of its dependencies could not be resolved: Failed to read artifact descriptor for org.apache.maven.plugins:maven-clean-plugin:jar:2.4.1
Downloading: http://repo.maven.apache.org/maven2/org/apache/maven/plugins/maven-install-plugin/2.3.1/maven-install-plugin-2.3.1.pom
Failed to retrieve plugin descriptor for org.apache.maven.plugins:maven-install-plugin:2.3.1: Plugin org.apache.maven.plugins:maven-install-plugin:2.3.1 or one of its dependencies could not be resolved: Failed to read artifact descriptor for org.apache.maven.plugins:maven-install-plugin:jar:2.3.1
Downloading: http://repo.maven.apache.org/maven2/org/apache/maven/plugins/maven-deploy-plugin/2.7/maven-deploy-plugin-2.7.pom
Failed to retrieve plugin descriptor for org.apache.maven.plugins:maven-deploy-plugin:2.7: Plugin org.apache.maven.plugins:maven-deploy-plugin:2.7 or one of its dependencies could not be resolved: Failed to read artifact descriptor for org.apache.maven.plugins:maven-deploy-plugin:jar:2.7
Downloading: http://repo.maven.apache.org/maven2/org/apache/maven/plugins/maven-site-plugin/3.0/maven-site-plugin-3.0.pom
Failed to retrieve plugin descriptor for org.apache.maven.plugins:maven-site-plugin:3.0: Plugin org.apache.maven.plugins:maven-site-plugin:3.0 or one of its dependencies could not be resolved: Failed to read artifact descriptor for org.apache.maven.plugins:maven-site-plugin:jar:3.0
Downloading: http://repo.maven.apache.org/maven2/org/apache/maven/plugins/maven-antrun-plugin/1.3/maven-antrun-plugin-1.3.pom
Failed to retrieve plugin descriptor for org.apache.maven.plugins:maven-antrun-plugin:1.3: Plugin org.apache.maven.plugins:maven-antrun-plugin:1.3 or one of its dependencies could not be resolved: Failed to read artifact descriptor for org.apache.maven.plugins:maven-antrun-plugin:jar:1.3
Downloading: http://repo.maven.apache.org/maven2/org/apache/maven/plugins/maven-assembly-plugin/2.2-beta-5/maven-assembly-plugin-2.2-beta-5.pom
Failed to retrieve plugin descriptor for org.apache.maven.plugins:maven-assembly-plugin:2.2-beta-5: Plugin org.apache.maven.plugins:maven-assembly-plugin:2.2-beta-5 or one of its dependencies could not be resolved: Failed to read artifact descriptor for org.apache.maven.plugins:maven-assembly-plugin:jar:2.2-beta-5
Downloading: http://repo.maven.apache.org/maven2/org/apache/maven/plugins/maven-dependency-plugin/2.1/maven-dependency-plugin-2.1.pom
Failed to retrieve plugin descriptor for org.apache.maven.plugins:maven-dependency-plugin:2.1: Plugin org.apache.maven.plugins:maven-dependency-plugin:2.1 or one of its dependencies could not be resolved: Failed to read artifact descriptor for org.apache.maven.plugins:maven-dependency-plugin:jar:2.1
Downloading: http://repo.maven.apache.org/maven2/org/apache/maven/plugins/maven-release-plugin/2.0/maven-release-plugin-2.0.pom
Failed to retrieve plugin descriptor for org.apache.maven.plugins:maven-release-plugin:2.0: Plugin org.apache.maven.plugins:maven-release-plugin:2.0 or one of its dependencies could not be resolved: Failed to read artifact descriptor for org.apache.maven.plugins:maven-release-plugin:jar:2.0
Downloading: http://repo.maven.apache.org/maven2/org/codehaus/mojo/maven-metadata.xml
Downloading: http://repo.maven.apache.org/maven2/org/apache/maven/plugins/maven-metadata.xml
Could not transfer metadata org.apache.maven.plugins/maven-metadata.xml from/to central (http://repo.maven.apache.org/maven2): proxy.host.net
Could not transfer metadata org.codehaus.mojo/maven-metadata.xml from/to central (http://repo.maven.apache.org/maven2): proxy.host.net
Failure to transfer org.apache.maven.plugins/maven-metadata.xml from http://repo.maven.apache.org/maven2 was cached in the local repository, resolution will not be reattempted until the update interval of central has elapsed or updates are forced. Original error: Could not transfer metadata org.apache.maven.plugins/maven-metadata.xml from/to central (http://repo.maven.apache.org/maven2): proxy.host.net
Failure to transfer org.codehaus.mojo/maven-metadata.xml from http://repo.maven.apache.org/maven2 was cached in the local repository, resolution will not be reattempted until the update interval of central has elapsed or updates are forced. Original error: Could not transfer metadata org.codehaus.mojo/maven-metadata.xml from/to central (http://repo.maven.apache.org/maven2): proxy.host.net
------------------------------------------------------------------------
BUILD FAILURE
------------------------------------------------------------------------
Total time: 0.864s
Finished at: Thu May 28 11:14:16 MSK 2015
Final Memory: 6M/155M
------------------------------------------------------------------------
No plugin found for prefix 'archetype' in the current project and in the plugin groups [org.apache.maven.plugins, org.codehaus.mojo] available from the repositories [local (C:\Users\vvf6426\.m2\repository), central (http://repo.maven.apache.org/maven2)] -> [Help 1]

To see the full stack trace of the errors, re-run Maven with the -e switch.
Re-run Maven using the -X switch to enable full debug logging.

For more information about the errors and possible solutions, please read the following articles:
[Help 1] http://cwiki.apache.org/confluence/display/MAVEN/NoPluginFoundForPrefixException
Ответ:
ivanra
если действительно есть прокси, то лучше спросить у админа его параметры. А если нет - то закомментировать


NetBeans:
    <proxy>
      <id>optional</id>
      <active>true</active>
      <protocol>http</protocol>
      <username>vvf6426</username>
      <password>XXX</password>
      <host>XXX.XXX.XXX.XXX</host>
      <port>8080</port>
    </proxy>


Maven:
	<proxies>
	   <proxy>
	   <active>true</active>
	   <host>XXX.XXX.XXX.XXX</host>
	   <port>8080</port>
	   </proxy>
	 </proxies>


Спасибо большое, очень помогли.
Админ помог.
P.S.: Вот я тупой однако.
Вопрос: Maven и линукс

В intellij idea файл настроек севера и локальный репозиторий хранится в папке home/user/.m2 . у меня на убунте файл настроек хранится в etc/ maven. А папки локального репозитория вообще не нашёл. Подскажите где должна хранится папка локального репозитория.

И ещё может подсказала почему при сборке проекта maven ругается на аннотации. На винде такого не было при дефолтной установке. Пишет что версия должна быть 5 и выше а у меня 1.2 или 1.4. Если встроенный равен в среду использовать то такого нету.
Ответ:
z3r9
В intellij idea файл настроек севера и локальный репозиторий хранится в папке home/user/.m2 . у меня на убунте файл настроек хранится в etc/ maven. А папки локального репозитория вообще не нашёл. Подскажите где должна хранится папка локального репозитория.


IDEA можно ткнуть носом в файл конфига мавена. Да и вообще в папку мавена (лучше использовать системный, чтобы не путаться в версиях). А локальный репозиторий- у меня да, /home/user/.m2/repository но на неё есть софтлинки /home/user/.m2/maven-repo и /usr/share/maven-repo - не помню, когда сделал, но это было быстрее, чем убеждать какое-то средство в правильно местонахождении репы :D

z3r9
И ещё может подсказала почему при сборке проекта maven ругается на аннотации. На винде такого не было при дефолтной установке. Пишет что версия должна быть 5 и выше а у меня 1.2 или 1.4. Если встроенный равен в среду использовать то такого нету.


Надо в проекте писать нечто вроде
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.1</version>
                <configuration>
                    <source>1.7</source>
                    <target>1.7</target>
                    <encoding>UTF-8</encoding>
                </configuration>
            </plugin>

чтобы проект собирался независимо от настроек машины.
Вопрос: maven plugin - узнать target версию компилятора

Добрый день!

Как узнать targer-version в плагине maven'а?

<build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <configuration>
                <target>8</target>


Вот эту 8ку мне надо вытащить.

PS: "зачем"- вдруг поможет.
Есть maven'овский плагин, который выполняет инструментацию кода с помощью ASM.
Надо правильно выбрать его режим- Opcodes.ASM4 или Opcodes.ASM5
Ответ:
Blazkowicz
Alexey Tomin,

Так в этом случае target должен быть указан явно. Разве нет? То есть он должен быть в DOM дереве XML. Или я не прав? Что если его там нет? Я этот способ сразу нашел

, но решил что надежнее у плагина-компилятора спросить.


Явно указан в проекте, который компилируется этим плагином.
Но так это ж нужно, иначе выбирается древняя версия какая-то.

Blazkowicz
А если в своём Mojo объявить точно такой же параметр
 @Parameter(property = "maven.compiler.target")

Он случайно не заинъектится тем же значением?


Нет почему-то.
 @Parameter(name = "maven.compiler.target")

тоже null
Вопрос: Maven project from 4 ant projects?

Здравствуйте, - подскажите пожалуйста - как лучше реализовать следующее.

Есть очень старые ant проекты, как-то строится с этого всего один war.
Нужно сделать такой же war только с помощью maven.

Нужно скопировать нужные конфигурации, запаковать 4 проекта в jar и потом из этого всего создавать war.

Спасибо.
Ответ:
_webdev_
Здравствуйте, - подскажите пожалуйста - как лучше реализовать следующее.

Есть очень старые ant проекты, как-то строится с этого всего один war.
Нужно сделать такой же war только с помощью maven.

Нужно скопировать нужные конфигурации, запаковать 4 проекта в jar и потом из этого всего создавать war.

Спасибо.


1. вызывать из мавена сценарии ant
2.переписать сборку проекта под maven ( возможно нужно будет изменить структуру проекта под мавен архетип )
Вопрос: Хитрая сборка проекта через Maven. Подскажите

Структура проекта:

app
|- app-jar
   |- WEB-INF
      |- file.html
|- app-war
   |- WEB-INF


Для war в pom.xml настроен maven-war-plugin с параметром <attachClasses>true</attachClasses>

Каким образом можно настроить сборку так, чтобы содержимое WEB-INF подключаемого jar'ника копировалось при сборке в war?
Ответ: Переделал jar в war, получилось:

app
|- app-newwar
   |- WEB-INF
      |- file.html
|- app-war
   |- WEB-INF


Добавил в app в pom.xml зависимость

<dependency>
	<groupId>xxx</groupId>
	<artifactId>app-newwar</artifactId>
	<version>1.0</version>
	<type>war</type>
	<scope>runtime</scope>
</dependency>


Добавил ее в pom.xml в app-war. В нем же донастроил maven-war-plugin:

<plugin>
	<artifactId>maven-war-plugin</artifactId>
	<version>2.6</version>
	<configuration>
		<attachClasses>true</attachClasses>
		<webResources>
			<resource>
				<directory>src/main/webapp/WEB-INF</directory>
				<filtering>true</filtering>
				<targetPath>WEB-INF</targetPath>
			</resource>
		</webResources>
	</configuration>
</plugin>


Собираю, деплою все это дело на сервер, вижу:

$ find . -name ‘file*.html'
./app-ear.ear/app-war-1.0.war/WEB-INF/classes/WEB-INF/file.html


Что нужно сделать, чтобы из подключенного war'а файлы копировались в корень основного war'а?