您好,登錄后才能下訂單哦!
打開Hybris安裝文件夾下的recipes,隨便打開一個recipe的build.gradle文件,發現使用了installer-platform-plugin和installer-addon-plugin這兩個plugin. Groovy setup任務的邏輯,也就是使用這兩個plugin里的實現,根據config實例化platform對象,然后調用其setup方法和executeAntTarget方法。
這兩個方法的實現源代碼在哪里?這就是本文所要描述的內容。
去docs文件夾里可以找到插件的實現源代碼:
到源代碼里根據executeAntTarget進行搜索:
在AbstractPlatform.groovy里找到了executeAntTarget的實現邏輯,發現其delegate到了成員屬性antExecutor里:
這個antExecutor的類型是HybrisAntExecutor:
找到HybrisAntExcutor,發現其只不過是調用類HybrisPluginUtils的靜態方法:
實現核心:
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.
import org.apache.tools.ant.taskdefs.condition.Os
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的原創文章,請關注公眾號"汪子熙":
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。