【问题标题】:Installing a jar file using Intellij run configuration使用 Intellij 运行配置安装 jar 文件
【发布时间】:2021-09-25 06:01:47
【问题描述】:

我正在尝试在 Intellij 中创建一个运行配置,单击即可为基于 maven 的项目的开发人员执行构建过程。其中配置如下:

  1. 构建模块1
  2. 构建模块2
  3. 启动服务器

该过程运行良好,但是在我构建 module2 时出现了问题。 Module2 依赖于在 module1 的目标文件夹中生成的 jar 文件,并且 module2 期望将此 jar 复制到本地存储库(.m2 文件夹),但由于 pom.xml 没有将 jar 复制到 .m2 文件夹moudle1 包含跳过安装的插件,如下所示:

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-install-plugin</artifactId>
    <version>2.4</version>
    <configuration>
        <skip>true</skip>
    </configuration>
</plugin>

这不会让这个 jar 被复制到 .m2 文件夹中。此配置已添加,因为服务器上存在空间限制,并且不需要在其上进行这些安装。

所以我需要做的是以某种方式将 jar 从 moudle1 的目标文件夹复制到 .m2 文件夹。 我试过了

mvn install:install-file -Dfile={path/to/my/legacy.jar} -DgroupId=mygroupid -DartifactId=legacy.jar -Dversion=1.2.3 -Dpackaging=jar

我对此的担心是我必须以静态方式提及文件和版本的路径。 是否可以从 pom.xml 文件中以某种方式访问​​这些属性?此外,目标文件夹仅在项目结构内,因此动态地设置项目结构的路径会很好,其余的都可以硬编码。

或者还有其他方法可以复制 jar 文件吗?

我无法修改 pom.xml,因为它是一个遗留结构,我只能通过运行配置进行任何更改。

【问题讨论】:

  • 当你运行 mvn install:install-file 时,你将消耗与让 maven 自己安装一样多的磁盘空间。
  • 我同意,但这将在开发人员系统上进行,磁盘空间利用率还可以。

标签: maven intellij-idea run-configuration


【解决方案1】:

您的第二个模块可能依赖于使用system 范围生成的jar。您可以在此处阅读更多信息:system scope。基本上,您需要在第二个模块的 pom 中设置对所需 jar 的依赖项,如下所示:

    <dependency>
        <groupId>com.your.groupId</groupId>
        <artifactId>your-aritfact</artifactId>
        <version>your-version</version>
        <scope>system</scope>
        <systemPath>path/to/my/legacy.jar</systemPath>
        <!-- you could also use maven project properties like ${project.basedir} to not hardcode the full path -->
    </dependency>

请注意,系统范围已被弃用,但我不知道是否有替代品,也不知道何时将其删除。

【讨论】:

  • 不幸的是,如前所述,我无法更改 pom.xml 文件。我所做的任何更改都只能通过运行配置进行。
【解决方案2】:

所以我找到了一种通过可用于运行配置的 maven 命令行的方法:

mvn install:install-file -Dfile=${project.build.directory}/${project.build.finalName}.jar -DgroupId=${project.groupId} -DartifactId=${project.artifactId} -Dversion=${project.version} -Dpackaging=jar

project.groupId、project.version 等所有变量都在 module1 的 pom.xml 中定义,我在同一个模块上运行此命令。这成功地将生成的 jar 安装到正确的工件文件夹结构下的 .m2 文件夹中。

这样命令本身就没有静态值了。

【讨论】:

    猜你喜欢
    • 2017-07-25
    • 2013-11-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-06-17
    • 1970-01-01
    相关资源
    最近更新 更多