Maven:在war构建中的资源文件夹中包含文件夹

7

我有一个名为extra-jars的文件夹在src/main/rescource中,但是我该如何将它们包含在构建中呢?我希望它们与其他jar一起放在lib文件夹中。我尝试通过<build>标签来包含它们,但是没有成功。

2个回答

10

对于没有通过Maven仓库分发的jar包,最简单的方法是将这些额外的jar包放在项目的src/main/webapp/WEB-INF/lib目录下。按照惯例,Maven会在最终的war构建过程中自动包含src/main/webapp目录下的所有内容。

另一种方法是使用Maven War插件。该插件允许通过配置向最终的war构建过程中添加额外的文件。这里有一个示例

在POM的构建部分中,添加以下类似代码:

<build>
  <plugins>
    <plugin>
      <groupId>org.apache.maven.plugins</groupId>
      <artifactId>maven-war-plugin</artifactId>
      <version>2.4</version>
      <configuration>
        <webResources>
          <resource>
            <directory>src/main/resource/extra-jars</directory>
            <includes>
              <include>*.jar</include>
            </includes>
            <targetPath>WEB-INF/lib</targetPath>
          </resource>
        </webResources>
      </configuration>
    </plugin>
  </plugins>
</build>

<configuration>部分是添加附加文件的关键。

  • <directory>元素定义资源的源位置。路径相对于pom.xml
  • <includes>元素定义上述目录中包含哪些文件。
  • <targetPath>元素定义将文件复制到WAR中的目标目录。

2
这些jar包应该作为Maven依赖项添加,而不是将它们复制到lib文件夹中。这正是Maven设计的用途。

这是我尝试了最近三天的事情,但是如果我使用依赖项检索它们,这些最后的JAR文件将无法启动我的程序,所以我用了另一种方式。这不是Maven的方式,但没有其他办法。 - TDC
你得到了哪些错误消息?将JAR添加到lib文件夹和类路径是Maven的基本操作,也许我们可以帮助您解决这个问题。 - TrueDub
这是关于Birt运行时查看器的。有一些jar包不正确,我无法找到正确的原因。使用这些依赖项的jar包会导致catalina内部错误等问题,而使用“本地” jar 包则可以正常工作。 - TDC
听起来你的“本地”jar包版本与Maven检索到的不同。你能验证一下吗?或者,你可以将你的“本地”jar包添加到本地maven仓库中,并从那里检索它们。这是一个简单的一键式过程。但是,如果你正在构建的应用程序将由其他人重新构建,这将不是一个好主意。 - TrueDub
它确实会被其他人重新构建。所以我想把它们放在资源文件夹里。 - TDC
你有远程仓库吗,例如 Nexus 或 Artifactory 吗?坦白地说,如果其他人将使用 Maven 构建它,它应该按照 Maven 的方式解决所有依赖关系 - 你确定你的版本是相同的吗? - TrueDub

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接