Windows下Libvirt Java API使用教程(一)- 开发环境部署

简介:

  Libvirt(http://libvirt.org/)是一个比较不错的虚拟化环境管理的工具包。核心用c实现,不过提供了不同语言的调用API。官网的简介如下:


 

libvirt is:

  • A toolkit to interact with the virtualization capabilities of recent versions of Linux (and other OSes), see our project goals for details.
  • Free software available under the GNU Lesser General Public License.
  • A long term stable C API
  • A set of bindings for common languages
  • CIM provider for the DMTF virtualization schema
  • QMF agent for the AMQP/QPid messaging system

libvirt supports:

libvirt provides:

  • Remote management using TLS encryption and x509 certificates
  • Remote management authenticating with Kerberos and SASL
  • Local access control using PolicyKit
  • Zero-conf discovery using Avahi multicast-DNS
  • Management of virtual machines, virtual networks and storage
  • Portable client API for Linux, Solaris and Windows

 

由于笔者我是一个简单而纯粹的Java程序员,所以自然只能依赖于libvirt的Java binding api。
作为一个源码控,我选择下载源码的方式验证使用:
源码的git地址如下:
 
git clone git://libvirt.org/libvirt-java.git 
 
笔者下载源码后,直接构建了Eclipse的工程,当然你也可以用源码编译(ant)出一份jar来依赖:
 
cd libvirt-java 
ant build  
 
libvirt也提供了Maven库:
 
没有Maven?可以直接从Maven库中下载Jar包:
 
 
这么多途径,相信你总可以搞到一份libvirt的源码或者Jar了吧。
 
由于libvirt的核心都是c写的,Java API只是帮助你封装了对动态链接库(dll)文件的本地调用,所以现在应该做的是安装dll文件。
 
libvirt官网提供了自行编译dll文件的脚本:

MSYS Build script

The easiest way is to use the msys_setup script, developed by Matthias Bolte. This is actively developed and kept current with libvirt releases:

https://github.com/photron/msys_setup 


不过笔者并没有尝试该种方式,因为libvirt官网也提供了windows下的安装包:


Experimental installation package

A windows installation package is in development. An experimental version is available here:

http://libvirt.org/sources/win32_experimental/Libvirt-0.8.8-0.exe

It is not production ready.(注:其并不是已经发布的产品)


该安装包中不仅包含了需要的dll文件,还提供了一个方便好用的virsh-shell 命令行工具,通过命令可以调用libvirt的所有接口(查看,管理虚拟机等。),对于我们的开发调试是非常有帮助的。

安装完成后,想让Java API找到dll文件,还需要指定jna路径,有两种方式,一种是直接设置系统环境变量:

另一种是可在程序中动态指定,笔者选择了后者,比较灵活简单,编写测试代码如下:


 
 
  1. public void testGetXenVMs() { 
  2.         try { 
  3.             System.setProperty("jna.library.path""D:/Git-Repo/git/libvirt-java/libvirt-java/src/test/java/kubi/coder/"); 
  4.             Connect conn = new Connect("xen+tcp://10.4.55.203/"); 
  5.             System.out.println(conn.nodeInfo().cores); 
  6.             for (String name : conn.listDefinedDomains()) { 
  7.                 System.out.println(name); 
  8.                 if (name != null) { 
  9.                     Domain domain = conn.domainLookupByName(name); 
  10.                     System.out.println(domain.getMaxMemory()); 
  11.                     System.out.println(domain.getUUIDString()); 
  12.                     System.out.println(domain.getInfo().maxMem); 
  13.                     System.out.println(domain.getInfo().state); 
  14.                     System.out.println(conn.listDomains().length); 
  15.                 } 
  16.             } 
  17.         } catch (LibvirtException e) { 
  18.             e.printStackTrace(); 
  19.         } 
  20.     } 

是不是还是找不到dll报异常?


 
 
  1. Exception in thread "main" java.lang.UnsatisfiedLinkError: Unable to load library 'virt' 

原来他是搜索叫virt的dll文件。

查看源码:


 
 
  1. Libvirt INSTANCE = (Libvirt) Native.loadLibrary("virt", Libvirt.class); 

确实如此,将libvirt-0.dll改名为virt.dll。结果终于出来了。
 
:libvirt的Java API封装的比较直观,上手很容易,其入口就是Connect 这个连接类,获取连接后,即可对虚拟机环境进行查看和管理操作。笔者后续会奉上Java API详细使用介绍。

 

 


     本文转自mushiqianmeng 51CTO博客,原文链接:http://blog.51cto.com/mushiqianmeng/863774,如需转载请自行联系原作者





相关文章
|
10天前
|
NoSQL Java 关系型数据库
Liunx部署java项目Tomcat、Redis、Mysql教程
本文详细介绍了如何在 Linux 服务器上安装和配置 Tomcat、MySQL 和 Redis,并部署 Java 项目。通过这些步骤,您可以搭建一个高效稳定的 Java 应用运行环境。希望本文能为您在实际操作中提供有价值的参考。
71 26
|
19天前
|
Java 开发者 微服务
Spring Boot 入门:简化 Java Web 开发的强大工具
Spring Boot 是一个开源的 Java 基础框架,用于创建独立、生产级别的基于Spring框架的应用程序。它旨在简化Spring应用的初始搭建以及开发过程。
38 6
Spring Boot 入门:简化 Java Web 开发的强大工具
|
6天前
|
存储 JavaScript 前端开发
基于 SpringBoot 和 Vue 开发校园点餐订餐外卖跑腿Java源码
一个非常实用的校园外卖系统,基于 SpringBoot 和 Vue 的开发。这一系统源于黑马的外卖案例项目 经过站长的进一步改进和优化,提供了更丰富的功能和更高的可用性。 这个项目的架构设计非常有趣。虽然它采用了SpringBoot和Vue的组合,但并不是一个完全分离的项目。 前端视图通过JS的方式引入了Vue和Element UI,既能利用Vue的快速开发优势,
52 13
|
1天前
|
监控 供应链 搜索推荐
阿里妈妈商品详情API接口:开发、应用与收益的深度剖析
阿里妈妈是阿里巴巴旗下的数字营销平台,其商品详情API接口为开发者提供了获取淘宝、天猫等电商平台商品详细信息的工具。本文介绍了该接口的开发流程、应用场景及带来的收益,揭示了其在电商生态中的重要地位。
18 6
|
1天前
|
供应链 搜索推荐 API
1688APP原数据API接口的开发、应用与收益(一篇文章全明白)
1688作为全球知名的B2B电商平台,通过开放的原数据API接口,为开发者提供了丰富的数据资源,涵盖商品信息、交易数据、店铺信息、物流信息和用户信息等。本文将深入探讨1688 APP原数据API接口的开发、应用及其带来的商业收益,包括提升流量、优化库存管理、增强用户体验等方面。
18 6
|
3天前
|
监控 搜索推荐 API
京东商品详情API接口的开发、应用与收益探索
在数字化和互联网高速发展的时代,京东通过开放商品详情API接口,为开发者、企业和商家提供了丰富的数据源和创新空间。本文将探讨该API接口的开发背景、流程、应用场景及带来的多重收益,包括促进生态系统建设、提升数据利用效率和推动数字化转型等。
16 3
|
8天前
|
供应链 搜索推荐 API
探索1688榜单商品详细信息API接口:开发、应用与收益
本文深入探讨了1688榜单商品详细信息API接口的开发与应用,涵盖接口概述、开发条件、调用方法及数据处理等内容。该API帮助企业高效获取1688平台商品信息,应用于商品信息采集、校验、同步与数据分析等领域,有效提升了企业的运营效率、库存管理、销售转化率及市场策略制定能力,降低了采购成本,提升了客户满意度。
34 9
|
11天前
|
算法 Java API
如何使用Java开发获得淘宝商品描述API接口?
本文详细介绍如何使用Java开发调用淘宝商品描述API接口,涵盖从注册淘宝开放平台账号、阅读平台规则、创建应用并申请接口权限,到安装开发工具、配置开发环境、获取访问令牌,以及具体的Java代码实现和注意事项。通过遵循这些步骤,开发者可以高效地获取商品详情、描述及图片等信息,为项目和业务增添价值。
44 10
|
5天前
|
前端开发 Java 测试技术
java日常开发中如何写出优雅的好维护的代码
代码可读性太差,实际是给团队后续开发中埋坑,优化在平时,没有那个团队会说我专门给你一个月来优化之前的代码,所以在日常开发中就要多注意可读性问题,不要写出几天之后自己都看不懂的代码。
40 2
|
11天前
|
存储 API 数据库
使用Python开发获取商品销量详情API接口
本文介绍了使用Python开发获取商品销量详情的API接口方法,涵盖API接口概述、技术选型(Flask与FastAPI)、环境准备、API接口创建及调用淘宝开放平台API等内容。通过示例代码,详细说明了如何构建和调用API,以及开发过程中需要注意的事项,如数据库连接、API权限、错误处理、安全性和性能优化等。
56 5