Ответ 1
Я бы создал один дополнительный "базовый" модуль (проект), упаковку "jar", который содержит общие ресурсы в src/main/resources
. Тогда я заставлю другие модули зависеть от этого проекта. Теперь они видят общие ресурсы в своих классах.
Есть ли способ совместного использования ресурсов между модулями родительского проекта в Maven? Например, я хотел бы указать один файл log4j.properties для всех модулей в многомодульном проекте Maven.
Как правило, я использую Eclipse IDE для создания родительского проекта, выбирая общий проект и затем конвертируя его в проект Maven, указав упаковку pom
. Это создает "чистую" структуру проекта без src
и т.д. Папок. Интересно, где такой общий ресурс следует поместить в этом случае.
EDIT1: я хотел бы поместить общие ресурсы в родительский проект.
Я бы создал один дополнительный "базовый" модуль (проект), упаковку "jar", который содержит общие ресурсы в src/main/resources
. Тогда я заставлю другие модули зависеть от этого проекта. Теперь они видят общие ресурсы в своих классах.
Возможность Antoher - использовать удаленный пакет ресурсов. Вы можете настроить его в родительском проекте. В этом примере я хотел скопировать некоторые файлы только для тестов. Если вы используете это, вам нужно будет создать пакет в другом проекте.
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-remote-resources-plugin</artifactId>
<version>1.5</version>
<configuration>
<resourceBundles>
<resourceBundle>es.sca:myBundle:1.0.0</resourceBundle>
</resourceBundles>
<attachToMain>false</attachToMain>
<attachToTest>true</attachToTest>
<appendedResourcesDirectory>${basedir}/src/test/resources</appendedResourcesDirectory>
</configuration>
<executions>
<execution>
<goals>
<goal>process</goal>
</goals>
</execution>
</executions>
</plugin>
Да, это кажется возможным решением. Но мне было интересно, можно указать эти ресурсы в родительском проекте (без введение дополнительного модуля), поскольку родительский проект определяет все общие зависимости и конфигурации Maven для ребенка модулей, я думаю, что родительский проект является наиболее подходящим местом также для общих ресурсов.
В случае типа упаковки pom, когда цель пакет указан для управления вашими совместно используемыми ресурсами, просто добавьте следующую (проверьте папки) в build раздел файла pom:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-resources-plugin</artifactId>
<executions>
<execution>
<id>copy-config-files</id>
<phase>package</phase>
<goals>
<goal>copy-resources</goal>
</goals>
<configuration>
<outputDirectory>${project.build.directory}/logconfig</outputDirectory>
<resources>
<resource>
<filtering>false</filtering>
<directory>${project.basedir}/src/main/resources</directory>
</resource>
</resources>
</configuration>
</execution>
</executions>
</plugin>
Мне удалось работать так:
Я создаю файл project/assembly/test/resources/META-INF/persistence.xml и добавляю его в свой pom.xml:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-resources-plugin</artifactId>
<executions>
<execution>
<id>copy-test-persistence-xml-resources</id>
<phase>process-test-sources</phase>
<goals>
<goal>copy-resources</goal>
</goals>
<configuration>
<outputDirectory>src/</outputDirectory>
<resources>
<resource>
<directory>${project.parent.basedir}/assembly/</directory>
<filtering>true</filtering>
</resource>
</resources>
</configuration>
</execution>
</executions>
</plugin>