blob: cd2bb2d1cf31669bcf6d16dc1c1b13541304eb48 [file] [log] [blame]
------
Sharing Resources
------
Dennis Lundberg
------
2011-12-23
------
~~ Licensed to the Apache Software Foundation (ASF) under one
~~ or more contributor license agreements. See the NOTICE file
~~ distributed with this work for additional information
~~ regarding copyright ownership. The ASF licenses this file
~~ to you under the Apache License, Version 2.0 (the
~~ "License"); you may not use this file except in compliance
~~ with the License. You may obtain a copy of the License at
~~
~~ http://www.apache.org/licenses/LICENSE-2.0
~~
~~ Unless required by applicable law or agreed to in writing,
~~ software distributed under the License is distributed on an
~~ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
~~ KIND, either express or implied. See the License for the
~~ specific language governing permissions and limitations
~~ under the License.
Sharing Resources
The Remote Resources Plugin can also be used to share resources between
modules in a multi module build. In the following example we have a set of
files that are used to set up a test environment for a database. We want to
reuse these resources in several modules in our project.
* Set up a module for the resources to be shared
Create a new module called <<<shared-resources>>>. Put the files in a
directory layout like the one below, making sure that your resource files are
in the <<<src/main/resources>>> directory:
-------------------
shared-resources
|
+- src
| |
| `- main
| |
| `- resources
| |
| +- database.ddl
| |
| `- database.sql
|
`- pom.xml
-------------------
The POM for <<<shared-resources>>> should look like this:
-------------------
<project>
...
<groupId>org.test</groupId>
<artifactId>shared-resources</artifactId>
...
<build>
<plugins>
<plugin>
<artifactId>maven-remote-resources-plugin</artifactId>
<version>${project.version}</version>
<executions>
<execution>
<goals>
<goal>bundle</goal>
</goals>
</execution>
</executions>
<configuration>
<includes>
<include>**/*.ddl</include>
<include>**/*.sql</include>
</includes>
</configuration>
</plugin>
</plugins>
</build>
...
</project>
-------------------
This will bundle the shared resources in a JAR file during the
<<<generate-resources>>> phase. This means that others modules can consume
these resources in any phase after that.
* Configure other modules to use the shared module
To use the shared resources in another module you need to configure the plugin
as follows:
-------------------
<project>
...
<groupId>org.test</groupId>
<artifactId>resource-consumer</artifactId>
...
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-remote-resources-plugin</artifactId>
<version>${project.version}</version>
<configuration>
<resourceBundles>
<resourceBundle>org.test:shared-resources:\${project.version}</resourceBundle>
</resourceBundles>
</configuration>
<executions>
<execution>
<goals>
<goal>process</goal>
</goals>
</execution>
</executions>
</plugin>
...
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>sql-maven-plugin</artifactId>
<version>1.4</version>
...
<!-- Not showing dependencies or configuration here for brevity -->
...
<executions>
<execution>
<id>create-schema</id>
<phase>process-test-resources</phase>
<goals>
<goal>execute</goal>
</goals>
<configuration>
<autocommit>true</autocommit>
<srcFiles>
<srcFile>\${project.build.directory}/maven-shared-archive-resources/database.ddl</srcFile>
<srcFile>\${project.build.directory}/maven-shared-archive-resources/database.sql</srcFile>
</srcFiles>
</configuration>
</execution>
...
</executions>
</plugin>
</plugins>
</build>
...
<dependencies>
<dependency>
<groupId>\${project.groupId}</groupId>
<artifactId>shared-resources</artifactId>
<version>\${project.version}</version>
</dependency>
</dependencies>
</project>
-------------------
This will retrieve the bundled resources of the <<<shared-resources>>>
module, process each resource in the bundle and put them in the
<<<\${project.build.directory}/maven-shared-archive-resources>>> directory of the
<<<resource-consumer>>> module.
That means we can use those files in the SQL Maven Plugin to set up the
database schema using a DDL file, and add some data to the database using an
SQL file.