Question

I'm having a POM file which is currently copying the compiled EAR file to a linux directory.

I mean to do the same for my Windows developers, without having them to manually adapt the output directory. Thus, the maven resource plugin should determine the path (/projects/shared_ears for Linux and D:\projects_bin\shared_ears for Windows) by the operating system. Can it be done with the maven-resources-plugin? Saying, without using the maven ant run plugin?

Below the existing copy command applicable for linux OS only.

Thanks for any smart idea.

<plugin>
    <artifactId>maven-resources-plugin</artifactId>
    <version>2.5</version>
    <executions>
        <execution>
            <id>copy-resources</id>
            <phase>install</phase>
            <goals>
                <goal>copy-resources</goal>
            </goals>
            <configuration>
                <outputDirectory>/projects/shared_ears</outputDirectory>
                <resources>
                    <resource>
                        <directory>${project.build.directory}</directory>
                        <includes>
                            <include>project-${project.version}.ear</include>
                        </includes>
                    </resource>
                </resources>
                <overwrite>true</overwrite>
            </configuration>
        </execution>

    </executions>
</plugin>
Was it helpful?

Solution

The simplest way to do this is to use maven profiles

One way to activate a profile is to use the os (operating system). You have to define a property. Let's say <ear.directory>/projects/shared_ears</ear.directory> and use this property in your plugin configuration:

        <configuration>
            <outputDirectory>${ear.directory}</outputDirectory>
            <resources>
                <resource>
                    <directory>${project.build.directory}</directory>
                    <includes>
                        <include>project-${project.version}.ear</include>
                    </includes>
                </resource>
            </resources>
            <overwrite>true</overwrite>
        </configuration>

Now, you can specify this property in 2 distinct profiles and activate one profile or the other based on the current operating system. Here is how to do it:

<profiles>
  <profile>
    <id>WinProfile</id>
    <activation>
      <os>
        <family>windows</family>
      </os>
    </activation>
    <properties>
      <ear.directory>D:\projects_bin\shared_ears</ear.directory>
    </properties>
    ...
  </profile>
  <profile>
    <id>UnixProfile</id>
    <activation>
      <os>
        <family>unix</family>
      </os>
    </activation>
    <properties>
      <ear.directory>/projects/shared_ears</ear.directory>
    </properties>
    ...
  </profile>
</profiles>

Additionnal info about profile and os detection here

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top