使用 Intellij 运行 配置安装 jar 文件
Installing a jar file using Intellij run configuration
我正在尝试在 Intellij 中创建一个 运行 配置,只需单击一下即可为基于 Maven 的项目的开发人员执行构建过程。其中,配置如下:
- 构建模块 1
- 构建模块 2
- 启动服务器
该过程运行良好,但在构建 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 文件夹中。
这样命令本身就没有静态值。
我正在尝试在 Intellij 中创建一个 运行 配置,只需单击一下即可为基于 Maven 的项目的开发人员执行构建过程。其中,配置如下:
- 构建模块 1
- 构建模块 2
- 启动服务器
该过程运行良好,但在构建 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 文件夹中。
这样命令本身就没有静态值。