Riccardo Cossu
Riccardo Cossu

Reputation: 2739

Maven: use jar from URL as a source for resources

Dealing with a legacy project, I have the need to load text resources from a jar at an URL. The text resources will be then filtered and included in the output; those resources come from a released artifact.

From resource-plugin I see it is only possible to give a number of directories; would it be possible to load resources as I need?

I want to do somthing like this, but using a remote jar instead of the oher project in the workspace:

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-resources-plugin</artifactId>
<executions>
    <execution>
    <id>copy-resources</id>
    <phase>process-resources</phase>
    <goals>
        <goal>copy-resources</goal>
    </goals>
    <configuration>
        <outputDirectory>${project.build.directory}/${project.build.finalName}</outputDirectory>
                        <resources>
                            <resource>
                                <directory>../<another project on the same workspace>/src/main/filtered-resources</directory>
                                <filtering>true</filtering>
                            </resource>
                        </resources>
                    </configuration>
                </execution>
            </executions>
        </plugin>
    </plugins>

Remote resource plugin, as suggested in one of the answer doesn't work because no file from the imported bundle ends up in target; there is no way I can produce the original bundle using remote resource plugin (it's a legacy projetc still in use and completely out of my control).

Upvotes: 0

Views: 1493

Answers (1)

Alonso Dominguez
Alonso Dominguez

Reputation: 7858

I think the Maven Remote Resources Plugin will suit your needs.

EDIT:

Snippet obtained from the usage page of the plugin. That XML fragment will attach the plugin to the generate-sources phase (choose a different one if it doesn't fit your needs), will download the apache-jar-resource-bundle artifact and uncompress its contents into ${project.build.directory}/maven-shared-archive-resources.

For better results is recommended that the resources artifact had been created using the bundle goal of the same plugin.

<!-- Turn this into a lifecycle -->
<plugin>
  <artifactId>maven-remote-resources-plugin</artifactId>
  <version>1.4</version>
  <executions>
    <execution>
      <id>process-remote-resources</id>
      <phase>generate-sources</phase>
      <goals>
        <goal>process</goal>
      </goals>
      <configuration>
        <resourceBundles>
          <resourceBundle>org.apache:apache-jar-resource-bundle:1.0</resourceBundle>
        </resourceBundles>
      </configuration>
    </execution>
  </executions>
</plugin>

EDIT 2: Alternative Solution using AntRun

If your artifacts don't suit Maven needs and you need something more customized, then using AntRun plugin you could get it somehow:

<plugin>
  <groupId>org.apache.maven.plugins</groupId>
  <artifactId>maven-antrun-plugin</artifactId>
  <version>1.7</version>
  <executions>
    <execution>
      <id>download-remote-resources</id>
      <goals>
        <goal>run</goal>
      </goals>
      <configuration>
        <target>
          <get src="URL of the resource" dest="${project.build.directory}" />
          <unzip src="${project.build.directory}/filename.[jar|zip|war]" dest="${project.build.directory}/${project.build.finalName}" />
        </target>
      </configuration>
    </execution>
  </executions>
</plugin>

Upvotes: 1

Related Questions