动态更改maven依赖项

时间:2013-09-26 13:17:58

标签: java maven jar dependencies

我有一个POM文件,其中一个依赖于Freemarker.jar。在库文件夹中有freemarker jar的几个版本。我想知道是否有更简单的方法来更新使用哪个freemarker jar而无需打开pom并更改jar的名称或必须找到jar并手动重命名它。具有不同freemarker jar的JComboBox将是最好的,但我不知道如何在运行时更改它。只要我所要做的就是更改组合框的选择并重新启动,我就可以重新启动应用程序。

我已经阅读了一些类似的问题,我相信这可能是不可能的。

这是我的依赖:

<dependency>
        <groupId>org.freemarker</groupId>
        <artifactId>freemarker</artifactId>
        <version>2.3.19</version>
    </dependency>

2 个答案:

答案 0 :(得分:2)

您可以使用exec-maven-plugin与maven中的依赖关系管理一起启动应用程序。必须可以通过命令行覆盖freemarker依赖项的版本。为此,您可以使用maven属性。

然后,您的用户可以通过命令行参数选择不同的freemarker版本来重新启动应用程序。

例如:

mvn exec:java -D=freemarker.version=2.3.19

但有3个限制:

  1. 您的用户需要重新启动应用程序
  2. 此解决方案仅在freemarker版本为binary compatible
  3. 时才可用
  4. 如果freemarker版本仅与源代码兼容,则您的用户还需要在启动它之前重新编译该应用程序。
  5. 如果你尝试这个解决方案,你应该从2个非常接近的freemarker版本开始,例如2.3.19。 2.3.18并尝试兼容。

    步骤1:将自由标记依赖项添加到依赖关系管理。

    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.freemarker</groupId>
                <artifactId>freemarker</artifactId>
                <version>${freemarker.version}</version>
            </dependency>
        </dependencies>
    </dependencyManagement>
    

    步骤2 为用户未在命令行指定的情况添加默认版本属性。

    <properties>
        <freemarker.version>2.3.19</freemarker.version>
    </properties>
    

    第3步配置exec-maven-plugin

    <plugin>
      <groupId>org.codehaus.mojo</groupId>
      <artifactId>exec-maven-plugin</artifactId>
      <version>1.2.1</version>
      <configuration>
        <mainClass>org.your.full.quallified.MainClass/mainClass>
      </configuration>
    </plugin>
    

    第4步尝试使用默认的freemarker版本

    执行它
    mvn exec:java
    

    第5步尝试使用其他freemarker版本执行

    mvn exec:java -D = freemarker.version = 2.3.18

答案 1 :(得分:0)

我认为你不能使用maven,因为maven(通常)在运行时没有使用,只在编译/构建期间使用。您可以将依赖项的范围更改为“已提供”,然后调整用于启动应用程序的机制,将正确的jar添加到类路径中。但是,有关如何运行应用程序的更多详细信息,很难提供更多详细信息。

编辑:改为正确的范围。