0

我已经建立了一个 arquillian 项目,它在本地运行良好,但是在我们的持续集成盒上运行 maven 构建时它失败了。我设法找到了问题的根源,这是因为 CI 框上的 maven 用户 settings.xml 文件实际上有一些服务器定义(用于另一个项目),而在我的机器本地它是默认文件(没有定义服务器)。测试会抛出 RuntimeException,因为 MavenResolver 会查找 CI 框上不存在的 settings-security.xml 文件。

我不想去添加 settings-security.xml,而是想为解析器提供一个“空”的 settings.xml 文件,或者更好的是,告诉它不要使用。这可能吗?

我尝试了这个线程https://developer.jboss.org/thread/174873的答案,它几乎说要向故障安全插件添加以下选项:

<plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-surefire-plugin</artifactId>
                 <version>2.9</version><!-- or upper -->
                        <configuration>
                            <systemPropertyVariables>
                                   <org.apache.maven.user-settings>nonExistentSetting.xml</org.apache.maven.user-settings>
                             </systemPropertyVariables>
                        </configuration>
</plugin>

如果我这样做并提供一个不存在的 xml 文件,那么在运行“mvn clean install”的命令行中一切正常,但是当我在我的 IDE 中调试时它仍然失败。

有没有办法我可以:告诉 maven 解析器不要使用 settings.xml / 使用“默认”文件在我的项目中创建一个空的 settings.xml 并告诉 maven 解析器使用它

我确实在我的代码中尝试了以下行来构建我的存档,但它似乎没有效果:

.addAsLibraries(Maven.configureResolver().fromFile("test-settings.xml").loadPomFromFile("pom.xml").importRuntimeDependencies().resolve().withTransitivity().asFile())

感谢您的帮助,克雷格

4

1 回答 1

0

ShrinkWrap 解析器默认从

DEFAULT_SETTINGS_SECURITY_PATH = userHome == null ? ".settings-security.xml" : userHome.concat("/.m2/settings-security.xml").replace('/', File.separatorChar);

但您可以通过设置覆盖此位置

System.setProperty(MavenSettingsBuilder.ALT_SECURITY_SETTINGS_XML_LOCATION,
            "someDir/empty-settings-security.xml");

当理论上提供替代位置(非空字符串)时,它应该跳过默认位置。但是我不是 100% 确定这种方法会奏效。

于 2015-07-23T21:34:27.557 回答