Web3j Gradle Plugin¶
Gradle plugin that generates Web3j Java wrappers from Solidity smart contracts. It smoothly integrates with your project's build lifecycle by adding specific tasks that can be also run independently.
Plugin configuration¶
To configure the Web3j Gradle Plugin using the plugins DSL or the legacy plugin application,
check the plugin page.
The minimum Gradle version to run the plugin is 5.+
.
Then run your project containing Solidity contracts:
./gradlew build
After applying the plugin, the base directory for generated code (by default
$buildDir/generated/sources/web3j
) will contain a directory for each source set
(by default main
and test
) containing the smart contract wrappers Java classes.
Code generation¶
The web3j
DSL allows to configure the generated code, e.g.:
web3j {
generatedPackageName = 'com.mycompany.{0}'
generatedFilesBaseDir = "$buildDir/custom/destination"
excludedContracts = ['Ownable']
useNativeJavaTypes = false
}
The properties accepted by the DSL are listed in the following table:
Name | Type | Default value | Description |
---|---|---|---|
generatedPackageName |
String |
${group}.web3j or org.web3j.{0} |
Generated contract wrappers package. |
generatedFilesBaseDir |
String |
$buildDir/generated/sources/web3j |
Generated Java code output directory. |
excludedContracts |
String[] |
[] |
Excluded contract names from wrapper generation. |
includedContracts |
String[] |
[] |
Included contract names from wrapper generation. Has preference over excludedContracts . |
useNativeJavaTypes |
Boolean |
true |
Generate smart contract wrappers using native Java types. |
addressBitLength |
int |
160 |
Supported address length in bits, by default Ethereum addresses. |
The generatedPackageName
is evaluated as a message format
string accepting a single parameter between curly brackets ({0}
),
allowing to format the generated value using the contract name. For convenience,
when applied to a Java package name it will be converted to lower case.
For instance, a generatedPackageName
set to ${group}.{0}
in a project with group
com.mycompany
, a Solidity contract named MyToken.sol
will be generated in the package
com.mycompany.mytoken
.
Also, the default value contains the ${group}
property, which corresponds to your project artifact
group (e.g. com.mycompany
). If the project does not define a group
property, the generated package
name will be org.web3j.{0}
.
Note that message format parameters are not Gradle properties and should not be preceded by $
.
Source sets¶
By default, all .sol
files in $projectDir/src/main/solidity
will be processed by the plugin.
To specify and add different source sets, use the sourceSets
DSL:
sourceSets {
main {
solidity {
srcDir {
"my/custom/path/to/solidity"
}
}
}
}
Check the Solidity Plugin documentation to configure the smart contracts source code directories.
Output directories for generated smart contract wrappers Java code will be added to your build automatically.
Plugin tasks¶
The Java Plugin
adds tasks to your project build using a naming convention on a per source set basis
(i.e. compileJava
, compileTestJava
).
Similarly, the Solidity plugin will add the generateContractWrappers
task for the project main
source set, and a generate[SourceSet]ContractWrappers
for each remaining source set (e.g. test
).
To obtain a list and description of all added tasks, run the command:
./gradlew tasks --all