2010-02-25 69 views
5

是否有能力构建maven工件,其中只包含资源但不包含任何源,并且可以被其他项目重用?maven可重用资源项目可能吗?

动机如下。我有一个只包含html/css/javascript代码的库。这个图书馆必须作为资源打包到战争项目中。至于现在我用单个pom构建资源的网络存档。但我能够将html/css/javascript代码分离为新的工件,并在几个战争项目中重用它?

回答

9

使用Maven Overlays。有关更多示例,请参见Manipulating WAR Overlays

+1

@Pascal Thivent你似乎知道你周围的maven文档的方式,它的写得很好,但是如果你问我,结构很糟糕。是否有链接包含从a到z的所有文档,也许我会找到一些我可以稍后使用的,甚至现在可以使用的东西,但我不知道它存在.. +1 – ant 2010-02-25 23:14:33

+0

这就是它!谢谢。 – 2010-02-26 08:40:32

+0

@c0mrade文档是人们经常抱怨的东西,所以我想你是对的(信息在那里,但很难找到,这正是你所说的)。幸运的是,我知道去哪里寻找或者现在搜索什么。但是有一些很好的书可以帮助你,例如http://www.sonatype.com/book/(可以在线获得)或http://www.packtpub.com/apache-maven-2-effective-implementations/书。强烈推荐。 – 2010-02-26 09:41:25

1

您可以使用Maven assembly plugin

+0

我究竟能做到这一点? – 2010-02-25 20:29:35

+0

@Volodymyr请检查我链接的用户指南,它也包含示例。如果你有一个更具体的问题,并告诉我们有关你的项目的更多细节,我们可以给你更具体的答案:-) – 2010-02-25 20:37:03

+0

据我了解分配组件它是最终的东西,不可重复使用。不是吗?如果是这样,他们不适合做我需要的东西。通过maven-assembly-plugin,我可以为资源库创建分发程序集。在我的战争中,我甚至可以使用这个神器作为依赖。在这种情况下,我将获取target \ war-artifact-1.0 \ WEB-INF \ lib \ resource-artifact-1.0.jar而不是解压缩到目标\ war-artifact-1.0 \文件夹中的发布程序集的内容。在提供的指南中,我没有找到任何方式将分发程序集提取到Web档案的根目录中。 – 2010-02-25 22:19:23

0

我不认为maven会阻止你将一些资源震撼到一起,并将其作为Web项目中的依赖项添加。

但是,您需要引用资源的方式会有点奇怪。 我不习惯将CSS样式表作为Java资源加载到WEB-INF/lib中的jar文件中。

我想将它们作为正常的Web资源,相对于WAR文件的根,而不是通过类加载器。

+0

是的,我不需要资源被震动。我需要它们存在于我的Web文件夹和Web存档中,以静态方式引用它们,而不是通过类加载器。 – 2010-02-25 20:36:53

0

这是一个非常简单的事情进行测试:

$ ls -R 
.: 
pom.xml src 

./src: 
main 

./src/main: 
resources 

./src/main/resources: 
README.txt content-is-here.txt 

$ mvn package 
... Maven doing it's thing... 

$ unzip -l target/test-1.0-SNAPSHOT.jar 
Archive: target/test-1.0-SNAPSHOT.jar 
    Length  Date Time Name 
--------- ---------- ----- ---- 
     0 02-25-2010 16:18 META-INF/ 
     123 02-25-2010 16:18 META-INF/MANIFEST.MF 
     10 02-25-2010 16:18 content-is-here.txt 
     0 02-25-2010 16:18 README.txt 
     0 02-25-2010 16:18 META-INF/maven/ 
     0 02-25-2010 16:18 META-INF/maven/group/ 
     0 02-25-2010 16:18 META-INF/maven/group/test/ 
     626 02-25-2010 16:15 META-INF/maven/group/test/pom.xml 
     106 02-25-2010 16:18 META-INF/maven/group/test/pom.properties 
---------      ------- 
     865      9 files 
+0

我需要有两个项目,而不是一个。第一个项目应该包含资源。第二个项目应该包括第一个项目投入战争的资源。 – 2010-02-25 21:56:32

+0

然后WAR覆盖是你想要的 – 2010-02-26 03:44:30

+0

是的,我现在可以看到叠加层正是我所需要的。 – 2010-02-26 08:42:28

0

这可以通过不和谐的资源神器期间validate阶段,例如它解压到的src /主/资源在战争中的项目来完成。资源POM是微不足道,但战争POM将包含以下内容:

<plugin> 
    <groupId>org.apache.maven.plugins</groupId> 
    <artifactId>maven-dependency-plugin</artifactId> 
    <executions> 
     <execution> 
      <id>unpack</id> 
      <phase>validate</phase> 
      <goals> 
      <goal>unpack</goal> 
      </goals> 
      <configuration> 
      <artifactItems> 
       <artifactItem> 
        <groupId>my.company</groupId> 
        <artifactId>resource-artifact</artifactId> 
        <version>1.0</version> 
        <overWrite>true</overWrite> 
        <outputDirectory>src/main/resources</outputDirectory> 
       </artifactItem> 
      </artifactItems> 
      </configuration> 
     </execution> 
    </executions> 
</plugin>