使用 Intellij 运行 配置安装 jar 文件

Installing a jar file using Intellij run configuration

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

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

该过程运行良好,但在构建 module2 时出现问题。 Module2 依赖于在 module1 的目标文件夹中生成的 jar 文件,module2 希望将此 jar 复制到本地存储库(.m2 文件夹),但 jar 未复制到 .m2 文件夹,因为 pom.xml of 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 文件夹。已添加此配置,因为服务器上存在 space 限制并且不需要在其上进行这些安装。

所以我需要做的是以某种方式将 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,因为它是遗留结构,我只能通过 运行 配置进行任何更改。

您的第二个模块可以依赖于使用 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>

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

所以我找到了一种通过 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 文件夹中。

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