SAP Hybris使用recipe進行安裝時,是如何執行ant命令的?
開啟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的靜態方法:
靜態方法之一: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
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的原創文章,請關注公眾號"汪子熙":
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/24475491/viewspace-2704700/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 使用 Recipe 安裝 SAP Commerce CloudCloud
- Dynamics CRM 如何使用命令列進行安裝命令列
- 使用指令碼進行 SAP Spartacus 安裝工作指令碼
- ubuntu下如何用命令列執行deb安裝包Ubuntu命令列
- mac使用phpize進行安裝的時候碰到的問題MacPHP
- 如何執行maven和執行maven的命令。Maven
- Android Studio 使用vivo手機真機執行時安裝spk安裝包總是安裝失敗Android
- gops 是怎麼和 Go 的執行時進行互動的?Go
- 如何測試Linux命令執行時間?Linux
- Linux使用time命令獲取命令執行時間Linux
- SQL是如何執行的SQL
- SAP Netweaver和Hybris Commerce啟動後執行的預設操作
- Android使用Ant進行apk多渠道打包AndroidAPK
- linux 安裝dotnet 8.0執行時Linux
- Golang 使用執行命令帶管道符執行的方法Golang
- 使用bat指令碼執行MySQL命令時遇到的坑BAT指令碼MySql
- storm安裝、執行ORM
- 使用responseFile進行oracle靜默安裝Oracle
- ant應該如何安裝
- sikuli 安裝執行 整合進MyEclipse 新手教程Eclipse
- SAPGUI 裡執行的老程式,如何對新的 SAP Fiori Belize Theme 進行適配?GUI
- sql更新是如何執行的?SQL
- c++是如何執行的C++
- 如何在程式碼中執行apk安裝APK
- ANT批量執行Jmeter指令碼JMeter指令碼
- 使用SAP API portal進行SAP SuccessFactors的API測試API
- Debian的定時執行命令Crontab
- 【機器學習】使用Octave執行命令機器學習
- 安裝grid時執行root.sh時的提示內容
- 如何使用 mock 資料在本地執行 SAP Fiori ElementsMock
- 單執行緒的JS如何實現多個互動同時進行執行緒JS
- pip進行模組安裝
- 執行緒池中多餘的執行緒是如何回收的?執行緒
- Java Main 如何是如何被執行的?JavaAI
- cmd執行命令時:不是內部或外部命令,也不是可執行的程式
- 使用SAP BSP應用執行VueVue
- 指定特定的jdk進行安裝JDK
- 不使用反射進行C#屬性的執行時動態訪問反射C#