【问题标题】:Maven in multimodule web project: how to put sibling modules output to WEB-INF/classes and not into WEB-INF/lib as JARs?多模块 Web 项目中的 Maven:如何将兄弟模块输出到 WEB-INF/classes 而不是作为 JAR 放入 WEB-INF/lib?
【发布时间】:2010-10-12 16:56:57
【问题描述】:

我有一个多模块 Maven 项目。 默认情况下,当我构建一个 Web 模块时,它所依赖的所有 JAR 类型的兄弟模块都被复制到 WEB-INF/lib 文件夹中。我希望将兄弟模块的输出放在 WEB-INF/classes 文件夹中而不打包到 JAR。

更一般的问题可能是:如何将兄弟模块的配置文件保留在 JAR 之外,以便在部署后可以轻松编辑它们?

【问题讨论】:

    标签: maven-2 war


    【解决方案1】:

    您可以使用overlay,尽管这要求兄弟姐妹的类型是war 而不是jar。也有使用依赖插件解压jar,但是只会解压你本地仓库中的版本,而不是你刚刚打包的那个。

    至于你的“更一般”的问题,jar 插件有 excludes 标签。

    【讨论】:

      【解决方案2】:

      如果有人感兴趣,我找到了这个解决方案。我遇到了完全相同的问题。

                  <build>
                  <plugins>
                      <plugin>
                          <groupId>org.apache.maven.plugins</groupId>
                          <artifactId>maven-war-plugin</artifactId>
                          <configuration>
                              <packagingExcludes>WEB-INF/lib/MYPACKAGE_TO_EXCLUDE.jar</packagingExcludes>
                          </configuration>
                      </plugin>
                      <plugin>
                          <groupId>org.apache.maven.plugins</groupId>
                          <artifactId>maven-dependency-plugin</artifactId>
                          <executions>
                              <execution>
                                  <id>unpack-MYPACKAGE_TO_EXCLUDE</id>
                                  <phase>compile</phase>
                                  <goals>
                                      <goal>unpack</goal>
                                  </goals>
                                  <configuration>
                                      <artifactItems>
                                          <artifactItem>
                                              <groupId>${project.groupId}</groupId>
                                              <artifactId>MYPACKAGE_TO_EXCLUDE</artifactId>
                                              <version>${project.version}</version>
                                              <type>jar</type>
                                              <outputDirectory>${project.build.directory}/classes
                                      </outputDirectory>
                                          </artifactItem>
                                      </artifactItems>
                                  </configuration>
                              </execution>
                          </executions>
                      </plugin>
                  </plugins>
              </build>
      

      【讨论】:

      • 我会这样做,但请记住其他人说的:“它只会解压缩本地存储库中的版本,而不是您刚刚打包的版本”
      • @Sean Patrick Floyd 是的,但是如果我进行完全重建,可能在父级中使用 mvn install,MYPACKAGE 会先被构建并复制到本地存储库,然后再构建这个项目。还是说第二个项目的构建在 MYPACKAGE 上传到 repo 之前?
      • 您先生是我的英雄。感谢您花时间发布您的解决方案。
      猜你喜欢
      • 2011-06-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-03-18
      • 2012-01-11
      • 1970-01-01
      • 1970-01-01
      • 2016-01-12
      相关资源
      最近更新 更多