Как правильно включить источники Java в Maven?

Я работаю над очень простым движком блога в Java, чтобы изучить несколько технологий.

Tech: Spring IoC, Hibernate, jUnit, GWT и Maven.

Я создал два проекта Maven: основной проект и проект GWT (который имеет ссылку на основной)

Код доступен по адресу https://github.com/LaurentT/BlogEngineCore

Моя цель заключается в следующем: я хочу включить источники Java и XML, так как моему проекту GWT понадобятся источники Java для его компиляции в JavaScript.

Я попытался использовать следующий код в элементе <build>:

     <resources>
        <resource>
            <directory>src/main/java</directory>
            <includes>
                <include>**/*.java</include>
            </includes>
        </resource>
        <resource>
            <directory>src/main/resources</directory>
            <includes>
                <include>**/*.*xml</include>
                <include>**/*.*properties</include>
            </includes>
        </resource>
    </resources>

Мои тесты jUnit, используемые для передачи и завершения до этого добавления, но теперь они даже не заканчиваются, они висят...

Я не знаю, что происходит, поэтому я хочу знать, есть ли другие способы включить источники Java или если я просто делаю это неправильно.

Любая подсказка?

Ответы

Ответ 1

попробуйте включить ${basedir} перед контуром каталога.

 
<resource>
    <directory>${basedir}/src/main/java</directory>
</resource>

Ответ 2

Более чистым способом было бы прикрепить отдельную баночку-источник.

Существуют стандартные способы генерации его в вашей сборке с использованием плагина источника maven:

 
<plugin>
  <groupId>org.apache.maven.plugins</groupId>
  <artifactId>maven-source-plugin</artifactId>
  <version>2.2.1</version>
  <executions>
    <execution>
      <id>attach-sources</id>
      <phase>verify</phase>
      <goals>
        <goal>jar-no-fork</goal>
      </goals>
    </execution>
  </executions>
</plugin>

И ваш проект GWT теперь может ссылаться на ваши основные источники проекта в дополнение к вашему основному банку проекта:

 
<dependency>
  <groupId>your.project</groupId>
  <artifactId>core</artifactId>
  <version>the.same.version</version>
  <classifier>sources</classifier>
  <scope>provided</scope><!-- use for compilation only -->
</dependency>

Ответ 3

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

Где файл * gwt.xml?

Если показанный тег является частью основного проекта pom.xml, то вы также должны добавить <include>**/*.gwt.xml</include>:

 
<resource>
        <directory>src/main/java</directory>
        <includes>
            <include>**/*.java</include>
            <include>**/*.gwt.xml</include>
        </includes>
</resource>

Ответ 4

В отличие от других ответов, мой подход копирует все дескрипторы модуля *.gwt.xml и только исходные файлы java, которые фактически указаны в дескрипторах модуля. Вам также не нужно повторять себя в дескрипторах POM и модуля.

Обновите свой pom с помощью

    <plugins>
        <plugin>
            <groupId>org.codehaus.mojo</groupId>
            <artifactId>gwt-maven-plugin</artifactId>
            <version>2.7.0</version>
            <executions>
                <execution>
                    <goals>
                        <goal>resources</goal>
                    </goals>
                </execution>
            </executions>
        </plugin>
    </plugins>

и ваш *.gwt.xml

<?xml version="1.0" encoding="UTF-8"?>
<module>

    <!-- Specify the paths for translatable code -->
    <source path='shared' />

</module>

org: codehaus.mojo: gwt-maven-plugin docs

GWT: ресурсы
Описание: Скопируйте исходный код GWT java и дескриптор модуля в качестве ресурсов в build outputDirectory. Альтернатива объявлению a <resource> в POM с более тонкой фильтрацией, поскольку дескриптор модуля считывается для обнаружения источников, которые нужно скопировать.
Реализация: org.codehaus.mojo.gwt.GwtResourcesMojo
Язык: java
Связано с фазой: технологические ресурсы