FISCO-BCOS/web3sdk

用spring boot 构建项目,使用web3sdk操作区块链。打成jar 包运行时,提示找不到ca.crt和client.keystore等资源文件

0xbuidler opened this issue · 8 comments

1,我定义了一个初始化web3sdk的静态方法,在spring boot 启动后执行
`public class FiscoBcosSdk {
private static Logger logger = LoggerFactory.getLogger(FiscoBcosSdk.class);
private static ApplicationContext context=null;

public static Web3j web3;
public static Credentials credentials;

public static void initObj() throws Exception {
	logger.info("(◉ω◉)===>Starting...");
	//初始化Service
	context = new ClassPathXmlApplicationContext("classpath:fisco-bcos/applicationContext.xml");
	Service service = context.getBean(Service.class);
	service.run();

	logger.info("(◉ω◉)===>初始化AOMP的ChannelEthereumService");

	ChannelEthereumService channelEthereumService = new ChannelEthereumService();
	channelEthereumService.setChannelService(service);
	
	//使用AMOP消息信道初始化web3j
	web3 = Web3j.build(channelEthereumService);
	
	EthBlockNumber ethBlockNumber = web3.ethBlockNumber().sendAsync().get();
	logger.info("(◉ω◉)===>获取ethBlockNumber:{}",ethBlockNumber.getBlockNumber());
	
	//初始化交易签名私钥
	ECKeyPair keyPair = Keys.createEcKeyPair();
	credentials = Credentials.create(keyPair);
	logger.info("(◉ω◉)===>blockchain sdk init success!");
}}

`
public static void main(String[] args) {
SpringApplication.run(DemoApplication.class, args);
try {
FiscoBcosSdk.initObj();
} catch (Exception e) {
logger.error("(T_T)===>FiscoBcosSdk.initObj() throws exception!");
e.printStackTrace();
}

}
`

代码在我本地的idea上执行没有任何问题。如下图:
image

2,我吧项目用maven 导出成jar 包在mac电脑上(linux)执行,提示找不到ca.crt等资源文件。如下图:
image

这个问题有可能是打成jar包后,他的资源地址前面带了个“jar:file...”。这样就找不到,我有搜相关Spring boot 读取resource资源相关的问题,但是大部分的解决方案是自己使用流来读取资源文件。不过web3sdk的接口是需要传递文件路径。这就很尴尬了。。。
另外我有试过获取ca.crt的文件绝对地址,然后传递过去依然是不行的 :-(

建议先看下https://fisco-bcos-documentation.readthedocs.io/zh_CN/v1.0.1/docs/web3sdk/config_web3sdk.html 这个使用文档,检查你的ca.crt是否放在resource目录下。

@yanyanho 如下图是我的资源文件配置和文件位置。如果ca.crt 不在resource目录的话,应该在本地就跑不起来吧。。。
image

看起来是在resource/fisco-bcos目录下,调整一下。

@yanyanho 我有测试过吧ca.crt等文件移动到resource目录下,但是依然是这个结果的。。。

@yanyanho 好的,谢谢。我去看看!

我参考了此文档 https://www.jianshu.com/p/a2cf2336a48c
我将resources中所有资源拷贝了一份到jar包同级的目录下。使用
java -Dloader.path=./resources -jar demo-0.0.1-SNAPSHOT.jar
这个命令解决了此问题!

image