我正在尝试在 Hybris 扩展中的 external-dependencies.xml 中设置我的依赖项。问题是它只加载我在那里指定的库,而不加载库在运行时需要使用的依赖项。
例如 Aixs2-kernel 加载 Axiom-api 和 impl 和 adb 等等。而在一个普通的 maven 项目中,我不需要一一指定它们。
有什么方法可以让 Hybris 理解获取其余的内容吗?
最佳答案
SAP Hybris 6.4+
是的,您可以通过覆盖 maven.download.options
来做到这一点。扩展中的参数 project.properties
文件。它的默认值等于:
-DoverWriteReleases=true -DoverWriteSnapshots=true -DoverWriteIfNewer=true -DexcludeTransitive=true
如果您添加到您的扩展
project.properties
该行:maven.download.options=-DoverWriteReleases=true -DoverWriteSnapshots=true -DoverWriteIfNewer=true
SAP Hybris 平台将下载所有依赖项(也是可传递的)。当然,此更改仅适用于您的扩展(请不要更改位于核心扩展中的
project.properties
文件的内容)。SAP Hybris 6.3 及更早版本
传递依赖的排除在
hybris/bin/platform/resources/ant/mavenTasks.xml
中硬编码文件(宏 updateLibFolder
)。唯一可能的解决方案是在 SAP Hybris 平台上打补丁。您可以更改此代码:<artifact:mvn pom="@{dependencyFile}" fork="true" failonerror="true" mavenVersion="3.2.5">
<arg value="dependency:copy-dependencies" />
<arg value="-DoutputDirectory=@{libfolder}" />
<arg value="-DoverWriteReleases=true" />
<arg value="-DoverWriteSnapshots=true" />
<arg value="-DoverWriteIfNewer=true" />
<arg value="-DexcludeTransitive=true" />
</artifact:mvn>
到:
<artifact:mvn pom="@{dependencyFile}" fork="true" failonerror="true" mavenVersion="3.2.5">
<arg line="dependency:copy-dependencies -DoutputDirectory=@{libfolder} ${maven.download.options}" />
<jvmarg line="${env.MAVEN_OPTS} ${env.JAVA_OPTS}" />
</artifact:mvn>
接下来定义一个属性
maven.download.options=-DoverWriteReleases=true -DoverWriteSnapshots=true -DoverWriteIfNewer=true
在
hybris/bin/platform/project.properties
最后从 6.4+ 的解决方案中执行步骤。警告: SAP Hybris 平台提供了大量库,因此您的一些传递依赖项可能已经可用。这就是为什么禁用传递依赖项的下载的原因。我认为手动指定它们而不是下载所有内容是个好主意(您将避免版本差异的问题)。
关于maven - hybris 的 maven 不下载传递依赖,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46599669/