demo地址 gitee.com/youngboyvip…html
Liquibase是一個用於跟蹤、管理和應用數據庫變化的開源的數據庫重構工具。它將全部數據庫的變化(包括結構和數據)都保存在XML文件中,便於版本控制java
在平常的項目開發中,開發團隊常常將數據庫和應用程序視爲單獨的實體,這樣就致使了數據庫團隊與應用開發團隊分離形成團隊之間信息交流不順暢,信息交流不及時,這種狀況一般表現爲下面幾種行爲mysql
上面的幾種行爲都是咱們在實際開發中遇到的問題,不只效率低並且出錯的機率也高,就算是老司機也會翻車git
解決上面問題的思路是 減小人工手工變動數據庫的機會,用程序管理數據庫版本的更替github
step1:建立change log文件(changlog.xml)web
change log 文件不必定要用xml寫 還可使用json sqlspring
<?xml version="1.0" encoding="UTF-8"?>
<databaseChangeLog
xmlns="http://www.liquibase.org/xml/ns/dbchangelog"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-3.1.xsd">
</databaseChangeLog>
複製代碼
step2: 添加變動集sql
<?xml version="1.0" encoding="UTF-8"?>
<databaseChangeLog
xmlns="http://www.liquibase.org/xml/ns/dbchangelog"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-3.1.xsd">
<changeSet id="1" author="bob">
<createTable tableName="department">
<column name="id" type="int">
<constraints primaryKey="true" nullable="false"/>
</column>
<column name="name" type="varchar(50)">
<constraints nullable="false"/>
</column>
<column name="active" type="boolean" defaultValueBoolean="true"/>
</createTable>
</changeSet>
</databaseChangeLog>
複製代碼
每一個更改集都用「id」屬性和「author」屬性惟一標識。「做者」屬性能夠最大限度地減小重複的可能性。 liquibase將每一個更改集視爲要應用於數據庫的原子更改。一般最好只在更改集中包含一個更改數據庫
step3: 運行ChangeSet liquibase 可使用命令行 Ant Maven Spring等工具運行 命令演示express
liquibase --driver=com.mysql.jdbc.Driver \
--classpath=/path/to/classes \
--changeLogFile=com/example/db.changelog.xml \
--url="jdbc:mysql://localhost/example" \
--username=user \
--password=asdf \
update
複製代碼
step4: 檢查你的數據庫 你能夠看到數據庫如今包含一個名爲「department」的表。還建立了另外兩個表:「databasechangelog」和「databasechangeloglock」。 databasechangelog表包含已針對數據庫運行的全部語句的列表。 databasechangeloglock表用於確保兩臺計算機不會同時嘗試修改數據庫。
liquibase提供了對Spring的支持因此咱們只須要引用對應的jar包並進行相關的配置就可使用了
這裏使用gradle做爲示例 step1: 添加依賴
compile "org.liquibase:liquibase-core"
compile "com.github.sabomichal:liquibase-mssql"
compile "com.microsoft.sqlserver:mssql-jdbc"
testCompile "com.mattbertolini:liquibase-slf4j"
複製代碼
step2: 添加liquibase文件
在resource目錄下建立liquibase文件夾,並建立master.xml文件做爲主文件 使用 <include file="config/liquibase/changelog/xxx.xml" relativeToChangelogFile="false"/>
目錄引入changelog文件
step3: 配置liquibase
@Bean
public SpringLiquibase liquibase(DataSource dataSource, LiquibaseProperties liquibaseProperties) {
SpringLiquibase liquibase = new SpringLiquibase(taskExecutor, env);
liquibase.setDataSource(dataSource);
//制定changelog的位置,這裏使用的一個master文件引用其餘文件的方式
liquibase.setChangeLog("classpath:config/liquibase/master.xml");
liquibase.setContexts(liquibaseProperties.getContexts());
liquibase.setDefaultSchema(liquibaseProperties.getDefaultSchema());
liquibase.setDropFirst(liquibaseProperties.isDropFirst());
return liquibase;
}
複製代碼
liquibase會在啓動的時候更新數據庫,能夠配置爲異步執行
隨着新特性添加到了應用程序中,常常須要變動數據庫的結構或修改表約束。LiquiBase 提了超過 30 種數據庫重構支持(參見 參考資料)。本節將介紹 4 種重構:添加列(Add Column)、刪除列(Drop Column)、建立表(Create Table)和操做數據。
在項目的開始,幾乎不可能考慮到數據庫中的全部列。而有時候,用戶要求新的特性 —例如爲存儲在系統中的信息收集更多的數據 —這就要求添加新的列。清單 4 使用 LiquiBase addColumn重構,向數據庫中的 distributor表添加了一個列:
清單 4. 使用 LiquiBase 變動集中的 Add Column 數據庫重構
<changeSet id="4" author="joe">
<addColumn tableName="distributor">
<column name="phonenumber" type="varchar(255)"/>
</addColumn>
</changeSet>
複製代碼
假如在之後幾個版本中,您想要刪除在清單 4 添加的 phonenumber列。只須要調用 dropColumn重構,如清單 5 所示:
刪除一個數據庫列
<dropColumn tableName="distributor" columnName="phonenumber"/>
複製代碼
向數據庫添加一個新表也是常見的數據庫重構。清單 6 建立了一個新表 distributor,定義了列、約束和默認值:
清單 6. 在 LiquiBase 中建立一個新數據庫表
<changeSet id="3" author="betsey">
<createTable tableName="distributor">
<column name="id" type="int">
<constraints primaryKey="true" nullable="false"/>
</column>
<column name="name" type="varchar(255)">
<constraints nullable="false"/>
</column>
<column name="address" type="varchar(255)">
<constraints nullable="true"/>
</column>
<column name="active" type="boolean" defaultValue="1"/>
</createTable>
</changeSet>
複製代碼
在應用告終構性數據重構後(例如添加列和建立表),一般須要向受重構影響的表中插入數據。此外,可能須要修改查找表(或其餘類型的表)中的現有數據。清單 7 展現瞭如何使用一個 LiquiBase 變動集插入數據:
清單 7. 使用一個 LiquiBase 變動集插入數據
<changeSet id="3" author="betsey">
<code type="section" width="100%">
<insert tableName="distributor">
<column name="id" valueNumeric="3"/>
<column name="name" value="Manassas Beer Company"/>
</insert>
<insert tableName="distributor">
<column name="id" valueNumeric="4"/>
<column name="name" value="Harrisonburg Beer Distributors"/>
</insert>
</changeSet>
複製代碼
您應該編寫用於操做數據的 SQL 腳本,由於使用 LiquiBase XML 變動集限制不少。有時候使用 SQL 腳本向數據庫應用大量的變動會簡單一些。LiquiBase 也能夠支持這些情景。清單 8 調用變動集中的 insert-distributor-data.sql來插入 distributor表數據:
清單 8. 從 LiquiBase 變動集運行一個定製 SQL 文件
<changeSet id="6" author="joe">
<sqlFile path="insert-distributor-data.sql"/>
</changeSet>
複製代碼
LiquiBase 支持不少其餘數據庫重構,包括 Add Lookup Table 和 Merge Columns。可使用如清單 4 到清單 8 所示的方式定義全部這些支持。
<!-- Children for changeSet -->
<xsd:group name="changeSetChildren">
<xsd:choice>
<xsd:element ref="comment" maxOccurs="1" />
<xsd:element ref="createTable" maxOccurs="unbounded" />
<xsd:element ref="dropTable" maxOccurs="unbounded" />
<xsd:element ref="createView" maxOccurs="unbounded" />
<xsd:element ref="renameView" maxOccurs="unbounded" />
<xsd:element ref="dropView" maxOccurs="unbounded" />
<xsd:element ref="insert" maxOccurs="unbounded" />
<xsd:element ref="addColumn" maxOccurs="unbounded" />
<xsd:element ref="sql" maxOccurs="unbounded" />
<xsd:element ref="createProcedure" maxOccurs="unbounded" />
<xsd:element ref="dropProcedure" maxOccurs="unbounded" />
<xsd:element ref="sqlFile" maxOccurs="unbounded" />
<xsd:element ref="renameTable" maxOccurs="unbounded" />
<xsd:element ref="renameColumn" maxOccurs="unbounded" />
<xsd:element ref="dropColumn" maxOccurs="unbounded" />
<xsd:element ref="mergeColumns" maxOccurs="unbounded" />
<xsd:element ref="modifyDataType" maxOccurs="unbounded" />
<xsd:element ref="createSequence" maxOccurs="unbounded" />
<xsd:element ref="alterSequence" maxOccurs="unbounded" />
<xsd:element ref="dropSequence" maxOccurs="unbounded" />
<xsd:element ref="renameSequence" maxOccurs="unbounded" />
<xsd:element ref="createIndex" maxOccurs="unbounded" />
<xsd:element ref="dropIndex" maxOccurs="unbounded" />
<xsd:element ref="addNotNullConstraint" maxOccurs="unbounded" />
<xsd:element ref="dropNotNullConstraint" maxOccurs="unbounded" />
<xsd:element ref="addForeignKeyConstraint" maxOccurs="unbounded" />
<xsd:element ref="dropForeignKeyConstraint" maxOccurs="unbounded" />
<xsd:element ref="dropAllForeignKeyConstraints"
maxOccurs="unbounded" />
<xsd:element ref="addPrimaryKey" maxOccurs="unbounded" />
<xsd:element ref="dropPrimaryKey" maxOccurs="unbounded" />
<xsd:element ref="addLookupTable" maxOccurs="unbounded" />
<xsd:element ref="addAutoIncrement" maxOccurs="unbounded" />
<xsd:element ref="addDefaultValue" maxOccurs="unbounded" />
<xsd:element ref="dropDefaultValue" maxOccurs="unbounded" />
<xsd:element ref="addUniqueConstraint" maxOccurs="unbounded" />
<xsd:element ref="dropUniqueConstraint" maxOccurs="unbounded" />
<xsd:element ref="setTableRemarks" maxOccurs="unbounded" />
<xsd:element ref="setColumnRemarks" maxOccurs="unbounded" />
<xsd:element ref="customChange" maxOccurs="unbounded" />
<xsd:element ref="update" maxOccurs="unbounded" />
<xsd:element ref="delete" maxOccurs="unbounded" />
<xsd:element ref="loadData" maxOccurs="unbounded" />
<xsd:element ref="loadUpdateData" maxOccurs="unbounded" />
<xsd:element ref="executeCommand" maxOccurs="unbounded" />
<xsd:element ref="stop" maxOccurs="unbounded" />
<xsd:element ref="output" maxOccurs="unbounded" />
<xsd:element ref="empty" maxOccurs="unbounded" />
<xsd:element ref="rollback" maxOccurs="1" />
<xsd:any namespace="##other" processContents="lax" minOccurs="0"
maxOccurs="unbounded" />
</xsd:choice>
</xsd:group>
複製代碼
gradle 2.0 以上寫法
plugins {
id 'org.liquibase.gradle' version '2.0.0'
}
複製代碼
gradle 2.0 如下寫法
buildscript {
repositories {
mavenCentral()
}
dependencies {
classpath "org.liquibase:liquibase-gradle-plugin:2.0.0"
}
}
apply plugin: 'org.liquibase.gradle'
複製代碼
dependencies {
...
// 選擇你須要的依賴
liquibaseRuntime 'org.liquibase:liquibase-core:3.6.1'
liquibaseRuntime 'org.liquibase:liquibase-groovy-dsl:2.0.0'
liquibaseRuntime 'mysql:mysql-connector-java:5.1.34'
...
}
複製代碼
//生成對比記錄文件的位置
project.ext.diffChangelogFile = 'src/main/resources/config/liquibase/changelog/' + new Date().format('yyyyMMddHHmmss') + '_changelog.xml'
//生成sql文件的位置
project.ext.generateSql = 'src/main/resources/config/liquibase/sql/' + new Date().format('yyyyMMddHHmmss') + '_update.sql'
liquibase {
activities {
prod {
driver 'com.microsoft.sqlserver.jdbc.SQLServerDriver'
url 'jdbc:sqlserver://localhost:1433;database=damManager'
username 'SA'
password 'yourStrong(!)Password'
changeLogFile 'config/liquibase/master.xml'
defaultSchemaName ''
logLevel 'debug'
baseDir 'src/main/resources/'
outputFile project.ext.generateSql
}
dev {
driver 'com.microsoft.sqlserver.jdbc.SQLServerDriver'
url 'jdbc:sqlserver://localhost:1433;database=damManager'
username 'SA'
password 'yourStrong(!)Password'
password 'sql_2008dba'
changeLogFile 'config/liquibase/master.xml'
defaultSchemaName ''
logLevel 'debug'
baseDir 'src/main/resources/'
outputFile project.ext.generateSql
}
diffLog {
driver ''
url 'jdbc:sqlserver://localhost:1433;database=damManager'
username 'SA'
password 'yourStrong(!)Password'
changeLogFile project.ext.diffChangelogFile
defaultSchemaName ''
logLevel 'debug'
classpath 'src/main/resources/'
}
runList = 'dev' // 這裏表明選擇哪個配置 可用參數代替
}
}
複製代碼
可經過自定義入口類,拓展liquibase的功能 拓展現例項目地址 gitee.com/youngboyvip…
默認入口類 liquibase.integration.commandline.Main
配置方法
liquibase {
mainClassName = 'liquibase.ext.commandline.LiquibaseAlternativeMain'
}
複製代碼
配置完成後就能夠在gradle中看到liquibase的task
注意:若是使用了include等標籤須要注意
file="xxx/xxx/xxx.xml"
絕對路徑和相對路徑,若是設置relativeToChangelogFile="false" 這說明你使用的是絕對路徑,true 選擇的是相對路徑,可自定義資源加載器解決絕對路徑和相對路徑的問題,能夠參考上方的示例項目
liquibase.activities 中配置的是必需要配置的參數,一些命令可能須要額外的參數,這個時候就須要使用命令行動態建立參數
若是使用的是gradle wrapper 須要使用gradlew 執行命令
示例
//多個參數用空格隔開,命令參數可參考文章下方附錄
gradlew <任務名> -PliquibaseCommandValue="--xx=yy --aa=bb"
複製代碼
不要手動修改數據庫 不要去修改原來的changeset
使用新的changeset
去修改 定時打tag 方便回滾
使用思路: 把之前的數據庫變動(好比表結構,存儲過程,基礎數據)導出來,而後使用liquibase管理,之後開發統一使用liquibase數據庫管理變動)
可使用數據庫工具導出爲sql
文件,或者使用liquibase命令行工具的generateChangelog
命令 導出XML變動文件
由於數據庫中已經存在對應的變動,因此只須要把導出來的變動記錄標記爲已執行便可
這步操做可使用liquibase命令行根據的changelogSync
或changelogSyncSQL
這個兩個命令的區別是一個會直接修改數據庫,一個是不直接修改數據庫,一個是生成對應的sql,須要手動指向sql
命令名稱 | 命令描述 |
---|---|
update | 更新數據庫到當前版本 |
updateSQL | 寫入SQL將數據庫更新到currentversion或STDOUT |
updateCount <num> | 將下一個NUM更改應用到數據庫 |
updateCountSQL <num> | 寫入SQL以將下一個NUM更改應用到數據庫 |
updateToTag <tag> | 使用指定的標記將數據庫更新到變動集 |
updateToTagSQL <tag> | 使用指定的標記將SQL寫入(到標準輸出)到更改集 |
rollback <tag> | 將數據庫回滾到指定標籤的狀態is was |
rollbackSQL <tag> | 生成數據庫回滾到指定標籤的sql |
rollbackToDate <date/time> | 將數據庫回滾到給定日期/時間的狀態is was。日期格式:yyyy-MM-dd 'HH: mm: ss |
rollbackToDateSQL <date/time> | 寫入SQL以將數據庫回滾到給定日期/時間版本的狀態到STDOUT |
rollbackCount <value> | 回滾應用於數據庫的最後一個<值>更改集 |
rollbackCountSQL <value> | 寫入SQL以回滾最後一個<值>更改集到應用於數據庫的stdoutapply |
futureRollbackSQL | 寫入SQL,以便在更改日誌中的更改完成後將數據庫回滾到當前狀態 |
futureRollbackSQL <value> | 在更改日誌中的<值>更改完成後,寫入SQL以將數據庫回滾到當前狀態 |
futureRollbackFromTagSQL <tag> | 寫入(到標準輸出)SQL,以便在更改後將數據庫回滾到其當前狀態 |
updateTestingRollback | 更新數據庫,而後再次回滾更改。用於測試回滾支持 |
generateChangeLog | 寫入更改日誌XML以將數據庫的當前狀態複製到標準輸出 |
snapshot | 將數據庫的當前狀態寫入標準輸出 |
snapshotReference | 將referenceUrl數據庫的當前狀態寫入標準輸出 |
Diff Commands | 數據庫對比命令 |
diff [diff parameters] | 數據庫對比命令 |
diffChangeLog [diff parameters] | 數據庫對比日誌 |
Documentation Commands | 文檔命令 |
dbDoc <outputDirectory> | 基於當前數據庫和更改日誌生成相似javadoc的文檔 |
Maintenance Commands | 維護命令 |
tag <tag string> | 給當前的數據庫打標籤,方便往後回滾 |
tagExists <tag string> | 檢查對應的標籤是否存在 |
status [--verbose] | 輸出爲執行changeset的行數 |
unexpectedChangeSets[--verbose] | 輸出本地不存在changeset 行數 |
validate | 檢查是否有錯誤的changelog |
calculateCheckSum <id> | 檢查指定changeset id 的checksum值 格式爲 filepath::id::author |
clearCheckSums | 從數據庫日誌中刪除全部保存的校驗和 |
changelogSync | 標記全部的更改已執行 |
changelogSyncSQL | 生成標記更改已執行的sql並輸出到標準輸出 |
markNextChangeSetRan | 將下一個變動標記爲已執行 |
markNextChangeSetRanSQL | 生成將下一個變動標記爲已執行的sql並輸出到標準輸出 |
listLocks | 列出liquibase數據庫鎖 |
releaseLocks | 釋放全部的liquibase數據庫鎖 |
dropAll | 刪除數據庫表(慎用!) |
參數 | 描述 |
---|---|
--changeLogFile=<path and filename> | 變動文件日誌路徑 |
--username=<value> | 數據庫用戶名 |
--password=<value> | 數據庫密碼 |
--url=<value> | 數據庫url |
參數 | 描述 |
---|---|
--classpath=<value> | 類路徑包含遷移文件和JDBC驅動程序 |
--driver=<jdbc.driver.ClassName> | 數據庫驅動程序類名 |
--databaseClass=<database.ClassName> | 自定義liquibase.database。Databaseimplementation使用 |
--propertyProviderClass=<properties.ClassName> | 要使用的自定義屬性實現 |
--defaultSchemaName=<name> | 要使用的默認數據庫模式 |
--contexts=<value> | 更改要執行的上下文 |
--labels=<expression> | 定義要執行的標籤變動集的表達式 |
--defaultsFile=</path/to/file.properties> | 帶有默認選項值的文件(默認:./liquibase.properties) |
--delimiter=<string> | 與executeSql命令一塊兒使用,用於設置用於分解包含多個語句的文件的字符串。 |
--driverPropertiesFile=</path/to/file.properties> | 在要建立的JDBC鏈接上設置自定義屬性的文件 |
--changeExecListenerClass=<ChangeExecListener.ClassName> | 自定義更改Execlistener實現以使用 |
--changeExecListenerPropertiesFile=</path/to/file.properties> | 用於自定義更改Exec偵聽器的屬性 |
--liquibaseCatalogName=<name> | 帶有liquibase表的目錄的名稱 |
--liquibaseSchemaName=<name> | 帶有liquibase表的模式的名稱 |
--databaseChangeLogTableName=<name> | Liquibase ChangeLogtable的名稱(默認:DATABASECHANGELOG) |
--databaseChangeLogLockTableName=<name> | Liquibase ChangeLogLock表的名稱(默認:DATABASECHANGELOGLOCK) |
--liquibaseSchemaName=<name> | 帶有liquibase表的模式的名稱 |
--includeSystemClasspath=<true|false> | 將系統類路徑包含在Liquibase類路徑中(默認:true) |
--promptForNonLocalDatabase=<true|false> | 若是非本地主機數據庫(默認:false),則提示 |
--logLevel=<level> | 執行日誌級別(調試、信息、警告、嚴重、關閉) |
--logFile=<file> | 日誌文件 |
--currentDateTimeFunction=<value> | 覆蓋SQL中使用的當前日期時間函數。適用於不受支持的數據庫 |
--outputDefaultSchema=<true|false> | 若是爲真,SQL對象引用包括模式名,甚至ifit也是默認模式。默認值爲true |
--outputDefaultCatalog=<true|false> | 若是爲真,SQL對象引用包括目錄名,甚至ifit也是默認目錄。默認值爲true |
--outputFile=<file> | 爲寫入輸出的命令寫入輸出的文件,例如updateSQL。若是沒有指定,則寫入sysout。 |
--help | 打印此消息 |
--version | 打印此版本信息 |
參數 | 描述 |
---|---|
--referenceUsername=<value> | 對比數據庫用戶名 |
--referencePassword=<value> | 對比數據庫密碼 |
--referenceUrl=<value> | 對比數據庫url |
參數 | 描述 |
---|---|
--defaultCatalogName=<name> | 默認數據庫目錄 |
--defaultSchemaName=<name> | 默認數據庫模式 |
--referenceDefaultCatalogName=<name> | 對比數據庫要使用的參考數據庫目錄 |
--referenceDefaultSchemaName=<name> | 對比數據庫要使用的數據庫模式 |
--schemas=<name1,name2> | 從比較中包含對象的數據庫模式 |
--referenceSchemas=<name1,name2> | 引用數據庫模式來包含來自比較的對象,只有在與——模式不一樣時才須要 |
--outputSchemaAs=<name1,name2> | 在diffChangeLog/generateChangeLog上,使用這些名稱做爲schemaNameinstead of the real name。 |
--includeCatalog=<true|false> | 若是爲真,則在生成的變動集中將目錄默認爲false |
--includeSchema=<true|false> | 若是爲真,模式將包含在生成的changeSetsDefaults中 |
--referenceDriver=<jdbc.driver.ClassName> | 引用數據庫驅動程序類名 |
--dataOutputDirectory=DIR | 以CSV格式輸出給定目錄中的數據 |
--diffTypes | diff類型的列表,包括inChange日誌用一個逗號分隔 |
參數 | 描述 |
---|---|
-?, -h, --help | 顯示幫助 - - ..... |
-a, --no-rebuild | 忽略"項目依賴",假設模塊web依賴於base,採用此參數後將再也不構建base模塊,即便base模塊代碼存在更新也不會(注意:若是base模塊是clean的,那麼加此參數構建不會將base依賴構建到項目中來,至關於忽略掉base依賴). |
-b, --build-file | 執行指定的*.gradle文件,默認首先會尋找當前目錄下的 build.gradle文件或依據settings.gradle中的配置尋找子項目中的 build.gradle, 採用-b參數將會忽略setting文件. |
-c, --settings-file | 執行指定的*.gralde文件,默認settings.gradle. |
--console | 指定控制檯輸出類型,可選值有 'plain', 'auto' (默認) , 'rich'.plain 是生成普通的文本,該選項禁止全部顏色和富文本輸出; auto (默認)當構建程序與控制檯相關聯時啓動 顏色和富文本輸出,或者不關聯時生成普通文本;rich 啓動顏色和富文本輸出,忽略構建程序是否關聯了控制檯,若是沒有關聯構建輸出將輸出 ANSI 控制字符來生產富文本輸出 |
--no-color | 取消控制檯着色效果,不過此選項已經不推薦使用,推薦使用 --console=plain替代. |
--continue | 忽略報錯繼續構建,默認報錯後終止構建. |
-d, --debug | 指定日誌輸出級別爲debug,可打印通常堆棧信息. |
-q, --quiet | 指定日誌輸出形式爲安靜模式,只打印errors. |
-i, --info | 指定日誌級別爲info. |
-S, --full-stacktrace | 指定日誌級別爲full-stacktrace,打印完整堆棧異常信息,超長超多. |
-s, --stacktrace | 指定日誌級別爲stacktrace,會打印全部堆棧異常信息. |
-D, --system-prop | -D屬性會被傳送給啓動Gradle的jvm,做爲一個系統屬性被jvm使用(例如:-Dname=tom). |
-P, --project-prop | 設置Gradle的項目參數,會被直接加載到Gradle領域對象上(例如:-Pversion=1.2). |
--configure-on-demand | 只在構建中應用項目相關配置Only relevant projects are configured in this build run. This means faster build for large multi-builds. [incubating] |
--daemon | 使用Gradle守護進程執行構建,若是沒有守護進程則啓動一個守護進程. |
--no-daemon | 禁用守護進程,不使用守護進程執行構建. |
--stop | 若是存在守護進程,那麼終止它. |
--foreground | 以foreground形式啓動守護進程. |
-g, --gradle-user-home | 指定默認的指定Gradle 用戶home 目錄.默認在"用戶目錄/.gradle". |
--gui | 運行Gradle GUI圖形界面程序. |
-I, --init-script | 執行指定init腳本,這個腳本會在build以前執行.會按照當前目錄,USER_HOME/.gradle/ ,USER_HOME/.gradle/init.d/,GRADLE_HOME/init.d/的順序尋找init.gradle文件 |
-m, --dry-run | 模擬任務執行過程並將過程打印出來,並不是真正執行,只是爲了讓你知道會執行哪些步驟. |
--max-workers | 指定採用幾個CPU核心執行構建/ |
--offline | 採用離線模式構建項目,固然若是你的gav中存在+,小心構建失敗. |
-p, --project-dir | 指定build.gradle腳本所在目錄,默認爲當前目錄.能夠經過此參數指定子項目目錄後,默認會執行指定目錄下的build.gradle文件. |
--parallel | 採用並行模式運行 |
--parallel-threads | 並行構建執行採用的線程數,不過已經棄用,推薦採用--parallel --max-workers替代. |
--profile | 存儲一份執行報告到<build_dir>/reports/profile,包括總時間和在配置和任務執行階段的細節。並以時間大小倒序排列,而且記錄了任務的執行狀況.Gradle會根據構建時間命名這些報告文件. |
--project-cache-dir | 指定項目緩存目錄,默認在項目根目錄下的.gradle文件夾. |
--recompile-scripts | 會丟棄緩存的腳本,而後從新編譯此腳本並將其存在緩存中.經過這種方式能夠強制 Gradle 從新生成緩存. |
--refresh-dependencies | 強制刷新依賴,忽略緩存從新下載 |
--rerun-tasks | 強制從新執行任務,忽略任務緩存,默認狀況下是增量構建 |
-t, --continuous | 連續構建模式,採用此模式後會監聽全部構建文件變化,文件發生變化後會自動從新構建 |
-u, --no-search-upward | 不該用父目錄中的ettings.gradle文件,若是不添加此項,父目錄的setting.gradle會覆蓋子目錄下的配置. |
-v, --version | 打印gradle版本信息. |
-x, --exclude-task | 任務排除,跳過執行指定任務. |