hybris的专家不下载传递依赖项

Meh*_*hdi 3 maven hybris

我试图在Hybris扩展的external-dependencies.xml中设置我的依赖项。问题在于它只是加载我在其中指定的库,而没有加载运行时库需要使用的依赖项。

例如,Aixs2-kernel加载Axiom-api,impl和adb等。在一个普通的Maven项目中,我不需要一一指定。

有什么方法可以使Hybris理解如何获取其余的信息?

aga*_*rys 5

SAP Hybris 6.4以上

是的,您可以通过覆盖maven.download.options扩展project.properties文件中的参数来实现。它的默认值等于:

-DoverWriteReleases=true -DoverWriteSnapshots=true -DoverWriteIfNewer=true -DexcludeTransitive=true
Run Code Online (Sandbox Code Playgroud)

如果将扩展名添加到扩展名中,则project.properties该行:

maven.download.options=-DoverWriteReleases=true -DoverWriteSnapshots=true -DoverWriteIfNewer=true
Run Code Online (Sandbox Code Playgroud)

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>
Run Code Online (Sandbox Code Playgroud)

至:

<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>
Run Code Online (Sandbox Code Playgroud)

接下来定义一个属性

maven.download.options=-DoverWriteReleases=true -DoverWriteSnapshots=true -DoverWriteIfNewer=true
Run Code Online (Sandbox Code Playgroud)

hybris/bin/platform/project.properties最后做从6.4+的解决步骤。


警告: SAP Hybris平台提供了很多库,因此您的某些传递依赖项可能已经可用。这就是为什么禁用传递依赖项的原因。我认为最好手动指定它们而不是下载所有内容(这样可以避免版本差异带来的问题)。