Maven - синхронизировать «главную» папку с папкой «tests» - PullRequest
2 голосов
/ 29 ноября 2010

Я только начинаю использовать Maven с моим проектом.Весь мой производственный код, конечно, находится внутри каталога main .Когда я добавляю юнит-тесты в мой каталог tests , есть ли способ синхронизировать каталог main с моим каталогом tests?1009 *.Я должен зайти в мою папку main и добавить то же имя пакета ... это довольно раздражает.

Ответы [ 5 ]

1 голос
/ 29 ноября 2010

Вот скрипт Groovy, встроенный в плагин GMaven . Это именно то, что вы просите.

<plugin>
    <groupId>org.codehaus.gmaven</groupId>
    <artifactId>gmaven-plugin</artifactId>
    <version>1.3</version>
    <executions>
        <execution>
            <id>mirror-folder-structure</id>
            <phase>generate-test-sources</phase>
            <goals>
                <goal>execute</goal>
            </goals>
            <configuration>
                <source>
                            <![CDATA[
static void createShadow(File base, File shadow){
    if(base.exists()&&!shadow.exists())shadow.mkdirs();
    base.eachDir { createShadow(it, new File(shadow, it.name))};
}
createShadow(pom.build.sourceDirectory,pom.build.testSourceDirectory);
                            ]]>
                </source>
            </configuration>
        </execution>
    </executions>
</plugin>

Проблема в том, что он не запускается автоматически. Я связал его с фазой generate-test-sources, но вы можете выбрать любую другую фазу. Однако вам придется выполнить этот этап вручную, например, mvn generate-test-sources.

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

0 голосов
/ 29 ноября 2010

Я не знаю ни одного плагина, который бы делал это, но его было бы довольно легко написать.Возможно, это можно сделать даже с помощью простого скрипта Groovy с использованием gmaven-plugin или подобного.

Кроме того, эта команда оболочки должна делать то, что вам нужно:

# ! -wholename '*/.*' excludes hidden dirs like .svn
$( cd src/main/java/ && find -type d ! -wholename '*/.*' -exec mkdir -p ../../test/java/{} \; )

РЕДАКТИРОВАТЬ:

Вот простой плагин Maven (этот плагин сортирует записи файлов eclipse .classpath по имени), который должен дать вам быстрый старт в разработке плагина Maven.

0 голосов
/ 29 ноября 2010

Обычно я использую IDE для создания тестов.

Например:

  • Я создаю новый класс org.bio.mynewpackage.MyNewClass в main/.
  • Теперь, когда я создаю тест org.bio.mynewpackage.MyNewClassTest, среда IDE должна автоматически создать необходимое дерево каталогов.
0 голосов
/ 29 ноября 2010

Я не знаю, искали ли вы что-то конкретное в отношении того, как maven может помочь вам в этом.Тем не менее я всегда использовал rsync для сопоставления с целевыми папками.

Что-то вроде: rsync -Crit ./source ./target

  1. , где C игнорирует версионные файлы / папкинапример .svn
  2. r - рекурсия, i - вывод информации.
  3. t - отметка времени.Я всегда помещал это, чтобы гарантировать, что различия в файлах основаны на отметке времени.

Добавьте 'n' для запуска в тестовом режиме, он будет выводить то, что изменится, а не фактически сделает это.Всегда делайте это сначала, так как rsync может полностью испортить ситуацию, если у вас нет прав.

Вы также можете добавить правила сопоставления с образцом, либо в файле в каждом каталоге, либо один раз в командной строке.

0 голосов
/ 29 ноября 2010

Я не знаю, правильно ли я понял вашу проблему: обычно, по соглашению, maven обнаруживает все файлы классов в main / java и все файлы классов в test / java. Вам не нужно объявлять имена пакетов.

Таким образом, если вы добавите новый пакет и классы в «main», они будут скомпилированы и упакованы, если вы добавите несколько новых тестов в «test», они будут автоматически обнаружены и выполнены на этапе тестирования.

...