Vladislav Rastrusny
Vladislav Rastrusny

Reputation: 29985

Maven: how to place resource file together with jar?

I have \src\main\resources\logback.xml file. When I run mvn package it is placed into the jar by default. How do I make Maven place it next to jar, not inside?

So, well, I just want Maven to copy the resource to the same folder where jar will be.

Upvotes: 36

Views: 55896

Answers (3)

Sean Patrick Floyd
Sean Patrick Floyd

Reputation: 298898

No plugin definitions needed, just edit the build resources:

<build>
    <resources>
        <!-- regular resource processsing for everything except logback.xml -->
        <resource>
            <directory>src/main/resources</directory>
            <excludes>
                <exclude>logback.xml</exclude>
            </excludes>
        </resource>
        <!-- resource processsing with a different output directory
             for logback.xml -->
        <resource>
            <directory>src/main/resources</directory>
            <includes>
                <include>logback.xml</include>
            </includes>
            <!-- relative to target/classes
                 i.e. ${project.build.outputDirectory} -->
            <targetPath>..</targetPath>
        </resource>
    </resources>
</build>

Reference:

Upvotes: 90

apetrelli
apetrelli

Reputation: 718

Exclude that file: http://maven.apache.org/plugins/maven-resources-plugin/examples/include-exclude.html

And then use the Maven Antrun plugin to copy the file.

However, the latter part does not make much sense. If it is a configuration file to put in a server, simply manually copy it.

Upvotes: 0

Sasha O
Sasha O

Reputation: 3749

You can build a ZIP file containing both using the Maven Assembly plugin.

You can also use Maven Antrun plugin or similar to put whatever file you want but the idea of single artifact per project is built deep into Maven internals so there is a chance it will hunt you down elsewhere.

Upvotes: 0

Related Questions