SAP Hybris使用recipe進行安裝時,是如何執行ant命令的?

i042416發表於2020-07-15

開啟Hybris安裝資料夾下的recipes,隨便開啟一個recipe的build.gradle檔案,發現使用了installer-platform-plugin和installer-addon-plugin這兩個plugin. Groovy setup任務的邏輯,也就是使用這兩個plugin裡的實現,根據config例項化platform物件,然後呼叫其setup方法和executeAntTarget方法。


SAP Hybris使用recipe進行安裝時,是如何執行ant命令的?


這兩個方法的實現原始碼在哪裡?這就是本文所要描述的內容。

去docs資料夾裡可以找到外掛的實現原始碼:


SAP Hybris使用recipe進行安裝時,是如何執行ant命令的?


到原始碼里根據executeAntTarget進行搜尋:


SAP Hybris使用recipe進行安裝時,是如何執行ant命令的?


在AbstractPlatform.groovy裡找到了executeAntTarget的實現邏輯,發現其delegate到了成員屬性antExecutor裡:


SAP Hybris使用recipe進行安裝時,是如何執行ant命令的?


這個antExecutor的型別是HybrisAntExecutor:


SAP Hybris使用recipe進行安裝時,是如何執行ant命令的?


找到HybrisAntExcutor,發現其只不過是呼叫類HybrisPluginUtils的靜態方法:


SAP Hybris使用recipe進行安裝時,是如何執行ant命令的?


靜態方法之一:runProcess

實現核心:

private static void runExternalProcess(String workDir, String[] command, Closure closure) {
        def builder = new DefaultExecHandleBuilder()
        builder.setWorkingDir((new File(workDir)).absolutePath)
        builder.setCommandLine(command)
        if (closure) closure.call(builder)
        def handle = builder.build()
        handle.start()
        def result = handle.waitForFinish()
        if (result.getExitValue() != 0) {
            throw new IllegalStateException("external process returned non-zero exit code, command: ${command}")
        }
    }

執行外部程式的方法,使用的是Groovy SDK提供的import org.gradle.process.internal.DefaultExecHandleBuilder.

靜態方法之二:isWindowsOs

import org.apache.tools.ant.taskdefs.condition.Os


SAP Hybris使用recipe進行安裝時,是如何執行ant命令的?


HybrisAntExcutor方法之一:getWindowsAntCmd

private String[] getWindowsAntCmd(String antArgs, String antOpts) {
        def antPreCommand = "set \"ANT_OPTS=${antOpts}\""
        antPreCommand += " & set \"PLATFORM_HOME=${platformHome}\""
        antPreCommand += " & set \"ANT_HOME=${platformHome}\\apache-ant-1.9.1\""
        antPreCommand += " & set \"PATH=${platformHome}\\apache-ant-1.9.1\\bin;%PATH%\""
        String antCommand = "${antPreCommand} & ant ${antArgs}"
        ['cmd', '/c', antCommand]
    }

要獲取更多Jerry的原創文章,請關注公眾號"汪子熙":

SAP Hybris使用recipe進行安裝時,是如何執行ant命令的?


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/24475491/viewspace-2704700/,如需轉載,請註明出處,否則將追究法律責任。

相關文章