Maven:使用URL中的jar作为资源来源

时间:2013-01-28 14:24:09

标签: maven

处理遗留项目时,我需要从URL中的jar加载文本资源。 然后将文本资源过滤并包含在输出中;这些资源来自已发布的工件。

从资源插件我看到它只能提供一些目录;是否可以根据需要加载资源?

我想做这样的事情,但是在工作区中使用远程jar而不是oher项目:

<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>

远程资源插件,如其中一个答案所示,不起作用,因为导入的捆绑包中的文件不会在目标中结束;我无法使用远程资源插件生成原始包(这是一个仍在使用的传统projetc,完全不受我的控制)。

1 个答案:

答案 0 :(得分:1)

我认为Maven Remote Resources Plugin符合您的需求。

修改

从插件的usage page获取的代码段。该XML片段将插件附加到generate-sources阶段(如果它不符合您的需要,请选择另一个阶段),将下载apache-jar-resource-bundle工件并将其内容解压缩到${project.build.directory}/maven-shared-archive-resources

为了获得更好的结果,建议使用同一插件的bundle目标创建资源工件。

<!-- 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>

编辑2:使用AntRun的替代解决方案

如果你的工件不适合Maven的需求而你需要更多自定义的东西,那么使用AntRun插件就可以得到它:

<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>