solidity-compiler-java提供了Java编译solidity合约文件的接口,solidity编译器solc可以参考:https://github.com/ethereum/solidity。
- linux
- x64
- aarch64
- mac
- windows
solidity-compiler-java支持三个版本的solidity编译器版本:
- 0.4.25
- 0.5.2
- 0.6.10
- 0.8.11
compile group: 'io.github.alleriawindrunner', name: 'solidity-compiler-java', version: '0.4.25'
compile group: 'io.github.alleriawindrunner', name: 'solidity-compiler-java', version: '0.5.2'
compile group: 'io.github.alleriawindrunner', name: 'solidity-compiler-java', version: '0.6.10'
compile group: 'io.github.alleriawindrunner', name: 'solidity-compiler-java', version: '0.8.11'
<dependency>
<groupId>io.github.alleriawindrunner</groupId>
<artifactId>solidity-compiler-java</artifactId>
<version>0.4.25</version>
</dependency>
<dependency>
<groupId>io.github.alleriawindrunner</groupId>
<artifactId>solidity-compiler-java</artifactId>
<version>0.5.2</version>
</dependency>
<dependency>
<groupId>io.github.alleriawindrunner</groupId>
<artifactId>solidity-compiler-java</artifactId>
<version>0.6.10</version>
</dependency>
<dependency>
<groupId>io.github.alleriawindrunner</groupId>
<artifactId>solidity-compiler-java</artifactId>
<version>0.8.11</version>
</dependency>
public static Result SolidityCompiler::compile(File source, boolean sm, boolean combinedJson, Option... options)
throws IOException;
public static Result SolidityCompiler::compile(byte[] source, boolean sm, boolean combinedJson, Option... options)
throws IOExceptio;
- File source : solidity文件文件路径
- byte[] resource : solidity文件内容
- boolean sm: 国密开关
- combinedJson:
- Option ... options: solc编译参数
- Options.ABI: 相当于solc --abi
- Options.BIN: 相当于solc --bin
- Options.INTERFACE: 相当于solc --interface
- Options.METADATA: 相当于solc --metadata
- Options.ASTJSON: 相当于solc --ast-json
- SolidityCompiler::Result对象
- boolean success: 是否编译成功
- String errors: 错误或者警告信息,编译失败时保存错误信息,编译成功时保存编译的警告信息
- String output: 编译结果,具体格式参考solc的返回格式
public static CompilationResult CompilationResult::parse(String rawJson) throws IOException
- String rawJson: Result.getOutput的值
- CompilationResult对象
- Map<String, ContractMetadata> contracts: 合约文件所有合约的编译结果
File socFile = new File("HelloWorld.sol");
SolidityCompiler.Result res = SolidityCompiler.compile(solFile, false, true, ABI, BIN, INTERFACE, METADATA);
if (!res.isFailed())) {
// 编译成功,解析返回
CompilationResult result = CompilationResult.parse(res.getOutput());
// 获取HelloWorld合约的编译结果
CompilationResult.ContractMetadata meta = result.getContract(“HelloWorld”);
// abi
String abi = meta.abi;
// bin
String bin = meta.bin;
// 其他逻辑
} else {
// 编译失败,res.getError()保存编译失败的原因
}