如何将战争资源纳入另一个maven项目

时间:2012-05-31 06:53:53

标签: maven maven-2 dependency-management maven-dependency-plugin

我有一个maven项目,需要从另一个打包为战争的maven项目中复制webapp / WEB-INF /资源。 我该怎么做 ? 建议

3 个答案:

答案 0 :(得分:1)

我可以看到一些替代方案:

  1. 在版本控制系统中使用外部引用将所有存储库指向相同的文件。
  2. Maven Dependency模块可以复制和解压缩项目依赖项。从那里,您可以使用Maven Assembly插件(或Ant目标)在您自己的安装中包含该依赖项的一部分。
  3. 至少对于FTL文件,也许您可​​以将它们打包在一个单独的Jar文件中,然后通过类加载器将它们作为资源加载。
  4. 如果资源被过滤,如果您想要过滤版本,则可能会遇到解决方案1的问题;如果您想要源版本,则可能会遇到2,3。

    希望这有帮助。

答案 1 :(得分:1)

正如Bittrance所说,你应该使用maven依赖插件。

更好的方法是创建包含所有共享资源的项目,可能是使用程序集插件构建的类型zip。这是一个很好的“maven方式”。这比打开战争更好。

然后,参考

    <dependency>
        <groupId>com.mygroup/groupId>
        <artifactId>my-dependencies</artifactId>
        <version>1.0.0</version>
        <type>zip</type>
    </dependency>

接下来,您使用maven依赖插件解压缩您的资源,在您选择的目录中(可能是WEB-INF /?)

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-dependency-plugin</artifactId>
    <executions>
       <execution>
           <id>unpack-cfg-test-resources</id>
           <goals>
                <goal>unpack-dependencies</goal>
           </goals>
           <phase>resources</phase>
              <configuration>
                <outputDirectory>${project.build.directory}/WEB-INF/</outputDirectory>
                                <includeArtifacIds>my-resources</includeArtifacIds>
                <excludeTypes>pom</excludeTypes>
                <excludeTransitive>true</excludeTransitive>
            </configuration>
        </execution>
     </executions>
 </plugin>

我不确定这个代码片段(为了其他目的而写),但这是一个例子。 有关详情,请点击以下链接:http://maven.apache.org/plugins/maven-dependency-plugin/

如果您无法共享包含文件的公共项目,您可以解压缩包括ftl(或任何您想要的)的战争,但它不是一个真正干净的解决方案;)

有很多帖子涉及这个主题: Unzip dependency in maven ... 只需尝试使用关键字maven-dependency-plugin,unpack:)

希望能帮助你。

答案 2 :(得分:0)

(这假设您的依赖项目是java(jar)而不是其他Web应用程序,如果它是webapp我认为解决方案类似)。

我建议采用(略微)不同的方法:
而不是从战争中读取资源,将其添加到你的战争pom,在工件中生成一个jar以及战争:

<!DOCTYPE html>
<html>
<head>
   <title>Learning JavaScript</title>
   <script src = "https://d3js.org/d3.v3.min.js"></script>
</head>
<body>
  <script>

        d3.csv("data.csv", function(d){

          console.log(d);

        })
  </script>
</body>
</html>

这是你的消费pom,所以生成的jar将被加载:

<!-- maven war plugin config -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
    <configuration>
        ...
        <attachClasses>true</attachClasses>
        <classesClassifier>some-string</classesClassifier>
    </configuration>
    <artifactId>maven-war-plugin</artifactId>
    <version>3.0.0</version>
</plugin>
...
<resources>
<!-- This is for inclusion in the jar, so dependent module can load it -->
    <resource>
        <targetPath>some-path</targetPath>
        <directory>src/main/webapp/path...</directory>
        <includes>
            <include>your-resource</include>
        </includes>
    </resource>
</resources>

然后您将能够以通常的方式加载资源(<dependency> <groupId>com.company</groupId> <artifactId>...</artifactId> <classifier>some-string</classifier> </dependency>