【问题标题】:Does maven reusable resource project possible?maven可重用资源项目可能吗?
【发布时间】:2011-01-21 04:39:10
【问题描述】:

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

动机如下。我有一个只包含 html/css/javascript 代码的库。这个库必须作为资源打包到战争项目中。至于现在,我通过单个 pom 使用资源构建 Web 存档。但是我能否将 html/css/javascript 代码分离成新的工件并在多个战争项目中重用它?

【问题讨论】:

    标签: java maven-2 pom.xml


    【解决方案1】:

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

    【讨论】:

    • @Pascal Thivent 你似乎知道你的方式 arround maven docs,如果你问我,它写得很好但结构很糟糕.. 是否有一个包含从 a 到 z 的所有文档的链接,也许我发现一些我以后可以使用的东西,也许甚至现在,但我不知道它存在.. +1
    • @c0mrade 文档是人们经常抱怨的东西,所以我猜你是对的(信息在那里但很难找到,这正是你所说的)。幸运的是,我现在知道去哪里寻找或搜索什么。但是有一些好书可以帮助你,例如sonatype.com/book(可在线获取)或packtpub.com/apache-maven-2-effective-implementations/book。强烈推荐。
    • 谢谢帕斯卡 我已经通过示例阅读了 maven 书(非常适合 maven 菜鸟的书)而且我还没有阅读 maven-by-reference ,我还得到了 Apache Maven 2 Effective实施,我希望在这个周末阅读它。
    【解决方案2】:

    您可以使用Maven assembly plugin 来完成。

    【讨论】:

    • @Volodymyr 请查看我链接的用户指南,它也包含示例。如果您有更具体的问题,并告诉我们有关您项目的更多详细信息,我们可以为您提供更具体的答案:-)
    • 据我所知,分发程序集是最终的,不可重复使用。不是吗?如果是这样,他们不适合做我需要的事情。使用 maven-assembly-plugin 我可以为资源库创建分发程序集。在我的战争 pom 中,我什至可以将此工件用作依赖项。在这种情况下,我将得到 target\war-artifact-1.0\WEB-INF\lib\resource-artifact-1.0.jar 而不是在 target\war-artifact-1.0\ 文件夹中解压缩的分发程序集的内容。在提供的指南中,我没有找到任何方法将分发程序集提取到 Web 存档的根目录中。
    • @Volodymyr 你可以指定你的程序集的包格式——它也可以是一个普通的目录结构。 OTOH,我很确定您可以将 jar 解压到特定目录中,例如通过 antrun 插件执行的 ant 任务。
    • éter 程序集的包格式无关紧要。组装是最终的,无论如何都不能重复使用。看起来汇编插件在我的情况下不起作用。将资源 jar 解压到 src/main/resources 文件夹中可以正常工作。我找到了这个解决方案,并在单独的答案中用 pom 示例对其进行了描述。但是这种方法与汇编插件没有什么共同之处:-)
    【解决方案3】:

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

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

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

    【讨论】:

    • 是的,我不需要破坏资源。我需要它们存在于我的 web 文件夹和 web 存档中以静态引用它们,而不是通过类加载器。
    【解决方案4】:

    这是一个非常简单的测试:

    $ 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
    

    【讨论】:

    • 我需要两个项目,而不是一个。第一个项目应该包含资源。第二个项目应该包括第一个项目的资源到战争中。
    • 那么你想要一个 WAR 覆盖
    • 是的,我现在可以看到覆盖正是我所需要的。
    【解决方案5】:

    这可以通过在 validate 阶段将资源工件 jarring 并解压缩到 war 项目中的 src/main/resources 中来完成。资源 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>
    

    【讨论】:

      猜你喜欢
      • 2012-03-07
      • 2017-03-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多