1

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

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

这是我的依赖:

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

2 回答 2

2

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

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

例如这样的:

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

但是有3个限制:

  1. 您的用户需要重新启动应用程序
  2. 仅当 freemarker 版本与二进制兼容时,此解决方案才有可能
  3. 如果 freemarker 版本仅与源代码兼容,则您的用户还需要在启动应用程序之前重新编译该应用程序。

如果您尝试此解决方案,您应该从 2 个非常接近的 freemarker 版本开始,例如 2.3.19。2.3.18 并尝试它们是否兼容。

第 1 步:将 freemarker 依赖项添加到依赖项管理中。

<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

于 2013-09-26T14:11:25.477 回答
0

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

编辑:更改为正确的范围。

于 2013-09-26T13:28:27.610 回答