我正在尝试在Hybris扩展中的external-dependencies.xml中设置我的依赖项。问题是它只是加载我在那里指定的库,并没有加载库在运行时需要使用的依赖项。
例如Aixs2-kernel加载Axiom-api和impl和adb等等。在正常的maven项目中,我不需要逐个指定每个项目。
有没有办法让Hybris理解其他人?
答案 0 :(得分:3)
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平台提供了大量库,因此可能已有一些传递依赖项可用。这就是为什么禁用下载传递依赖项的原因。我认为手动指定它们而不是下载所有内容是个好主意(您将避免版本差异的问题)。