【问题标题】:how to avoid resource override when using maven to generate runnable jar?使用maven生成可运行jar时如何避免资源覆盖?
【发布时间】:2014-05-16 00:52:44
【问题描述】:

我有一个 maven 项目并依赖一个包含一个资源文件(c3p0.xml)的 jar,我将资源复制到我的 src/main/resource 文件夹并根据我的要求更改内容以便我可以使用它。

但是在我运行 mvn assembly:assembly 命令后,生成的 jar 包含资源的内容是旧的依赖 jar 而不是我在 src/main/resource 中的内容如何处理?

我的pom.xml的关键内容如下:

<plugin>
            <!-- mvn assembly:assembly -->
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-assembly-plugin</artifactId>
            <version>2.4</version>
            <configuration>
                <descriptorRefs>
                    <descriptorRef>jar-with-dependencies</descriptorRef>
                </descriptorRefs>
                <archive>
                    <manifest>
                        <mainClass>com.fastcheck.RequestUrl</mainClass>
                    </manifest>
                </archive>
            </configuration>
        </plugin>

【问题讨论】:

  • 如果你调用 'mvn assembly:assembly' 你不会调用生命周期,这意味着不会从 'src/main/resources' 复制到 'target/classes' 文件夹中。问题是你需要通过'mvn clean package'运行你的构建
  • @khmarbaise 但是如何通过 maven pacakge 生成可执行 jar?

标签: java maven jar


【解决方案1】:

jar-with-dependencies 组装机制使用您声明的 maven 依赖项,而不是来自资源目录中的内容。如果您想使用更新版本的 jar,请在 .pom 文件中声明更新版本作为依赖项。

【讨论】:

  • 我想在我的资源中使用新的配置,而不是在依赖 jar 中。
  • 我用你的 maven 配置生成 jar 文件,它对我有用。你能发布整个 maven pom 文件吗?
【解决方案2】:

您应该像这样将 maven-assembly-plugin 绑定到构建生命周期:

<project>
  [...]
  <build>
    [...]
    <plugins>
      <plugin>
        <artifactId>maven-assembly-plugin</artifactId>
        <version>2.4</version>
        <configuration>
          <descriptorRefs>
            <descriptorRef>jar-with-dependencies</descriptorRef>
          </descriptorRefs>
        </configuration>
        <executions>
          <execution>
            <id>make-assembly</id> <!-- this is used for inheritance merges -->
            <phase>package</phase> <!-- bind to the packaging phase -->
            <goals>
              <goal>single</goal>
            </goals>
          </execution>
        </executions>
      </plugin>
      [...]
</project>

这将在包生命周期阶段执行maven-assembly-plugin

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-08-02
    • 1970-01-01
    • 2020-12-26
    • 2015-08-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-22
    相关资源
    最近更新 更多