将本地 jar 安装到自动化管道和 sonarqube:如何在没有命令和系统路径的情况下进行?

Installing local jar to automated pipeline and sonarqube: how to do it with no command and no systempath?

我正在开发一个需要客户端个人 jar 的项目,它需要部署在我们无法控制的工具管道上(很遗憾)。此管道中的工具之一是 sonarqube。 要构建和部署,我们必须使用 maven。

我将 jar 放入项目的文件夹中,并尝试了各种方法使其实际工作。 第一种(可行的)方法是将其作为一个系统,并使用指向项目文件夹的系统路径。它编译、工作和一切,但 sonarqube 显然讨厌 systemPath 并让我们把它拿走。 经过一点点搜索,我们向我们的 pom 添加了一个 maven-install-plugin,绑定了一个安装文件以验证阶段并配置为生成依赖项。如果我先 运行 mvn validate 然后 mvn clean package,这似乎在本地工作。否则,它会尝试在主存储库中查找 jar 并失败。如果我评论标签并只保留插件活动,我注意到它执行插件,将 jar 安装到本地存储库,但由于未解析包和 jar 中的 类,构建失败。如果我现在放入标签,一切正常,因为它现在在存储库中找到了 jar。 虽然这个解决方案有效,但它不适合我,因为存储库每隔一段时间就会被清空,并重新启动我需要提交的所有内容,一个已知的失败,只是为了安装 jar。

我尝试添加一个标签,指向一个项目目录,我将在其中存储必要的 jar,这在我的 PC 上工作得很好,但在管道上完全失败,只查看主存储库(我猜它是管道上的一些配置,但不能真正说出来,不在我的控制范围内)

实际上可以使用 maven 安装插件来完成,

<groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-install-plugin</artifactId>
            <configuration>
                <groupId>com.exmaple.stuff</groupId>
                <artifactId>ClientJar</artifactId>
                <version>1.0</version>
                <packaging>jar</packaging>
                <file>${project.basedir}/src/main/resources/ClientJar-1.0.jar</file>
                <generatePom>true</generatePom>
            </configuration>
            <executions>
                <execution>
                    <id>install-client-jar</id>
                    <phase>validate</phase>
                    <goals>
                      <goal>install-file</goal>
                    </goals>
               </execution>
            </executions>
        </plugin>
    </plugins>

并且有依赖性

<!-- Client jar -->
    <dependency>
        <groupId>example</groupId>
        <artifactId>ClientJar</artifactId>
        <version>1.0</version>
    </dependency>

如果您注意到,这里棘手的部分实际上是 groupId 在依赖项和插件声明之间是不同的。我不知道这种差异是否是由于他们的 artifactory 服务器的配置造成的,但它似乎也适用于本地。 还需要在管道中显式 运行 mvn validate