admin管理员组文章数量:1794759
史上最新 PHP 调用 jar包教程
最近一个接到新需求,需要调取银行的一些接口,我们业务代码是用PHP写的,但是银行那边给的是jar包和一个maven依赖啥的,这跨度有点大啊,不多说了,就在网上查询相关资料,发现PHP有个php-java-bridge的插件,于是开始了php调用java的第一个程序。在这个过程中花了挺长时间的,原因是看了网上的文章(blog)真的是醉了,全部都是千篇一律的,说什么要将jar包需放在java虚拟机的lib/ext 下面才能自动加载,于是我一顿倒腾,最后还是行不通,总是报class not found…,这个错陪伴了我三天,当时心态都快要崩溃了,最后还是问了一下我一个做java开发的朋友,才有点眉目,为了避免其他的同学能趟更少的坑,今天就来分享一下。 一、准备工作 1、php环境【5.6】 2、java环境【1.8】 3、tomcat【7.0】 4、php-java-bridge【JavaBridgeTemplate721.war】 5、maven(这个不是必须,如果jar包中的类依赖其他的类,则需要下载) 二、测试环境是否配通 1、相关环境添加环境变量,确保php,java,javac,jar,mvn 等命令都能运行成功 三、开始运行第一段java代码 1、将下载的JavaBridgeTemplate721.war 放在 tomcat的webapps目录下,启动tomcat,这是webapps目录下就会多出一个同名的目录,接下来写一段java代码 2、test.java 示例
public class Test { private String name = ""; //setter and getter public void setName(String name) { this.name = name; } public String getName() { return this.name; } //加法 public float add(float num1, float num2) { return num1 + num2; } }3、打开cmd,cd 到 test.java所在目录 执行 javac test.java 生成了 test.class 再执行 jar cvf test.jar test.class 生成了 test.jar 将test.jar复制一份到java虚拟机的lib/ext目录下,在此之前需将tomcat关闭,然后放好了包再开启tomcat服务。 4、开始写php代码调用java test类
require_once('localhost:8080/JavaBridgeTemplate721/java/Java.inc'); // get instance of Java class java.lang.System in PHP // $system = new Java('java.lang.System'); // // // demonstrate property access // echo 'Java version=' . $system->getProperty('java.version') . '<br/>'; // echo 'Java vendor=' . $system->getProperty('java.vendor') . '<br/>'; // echo 'OS=' . $system->getProperty('os.name') . ' ' . // $system->getProperty('os.version') . ' on ' . // $system->getProperty('os.arch') . ' <br/>'; // // java.util.Date example // $formatter = new Java('java.text.SimpleDateFormat', // "EEEE, MMMM dd, yyyy 'at' h:mm:ss a zzzz"); // echo $formatter->format(new Java('java.util.Date')); // echo '<br/>'; //下面是php调用自己编写的test.java的方法。 $test=new Java("Test"); $test->setName("aaaaaaaaa"); echo "vvv<br>"; echo "bbb<br>";5、注意点: a、开启tomcat b、require_once localhost:8080/JavaBridgeTemplate721/java/Java.inc 这个文件 6、如果jar包含有package则编译的时候就注意了 方法为:javac -d . test.java (指定当前目录),比如 jar包 package aa; 打包:jar -cvf ./aa/test.jar ./aa/test.class 然后再将test.jar 放到jre/lib/ext目录下 调用的时候再用 $test=new Java(“aa.test”); 7、maven 依赖可移步(wwwblogs/liuhongfeng/p/5057827.html) 如果jar包中依赖其它的jar包,则可以通过maven配置仓库,我这个就没配置,直接通过maven下载相关jar包到本地,然后相关文件自行引用即可。那么怎么通过maven去批量下载相关包呢。 初始化Maven本地仓库 在命令行窗口中输入mvn help:system 在执行该命令的过程中,会生成./m2文件夹(~ 代表操作系统的当前用户目录),也就是本地仓库,并且会从Maven官网下载必要的依赖包到本地仓库。 在pom.xml添加如下配置(你所用到的jar包):
// <groupId>commons-lang</groupId> // <artifactId>commons-lang</artifactId> // <version>2.6</version> // </dependency> // <dependency> // <groupId>dom4j</groupId> // <artifactId>dom4j</artifactId> // <version>1.6.1</version> // </dependency> // <dependency> // <groupId>org.bouncycastle</groupId> // <artifactId>bcprov-jdk16</artifactId> // <version>1.46</version> // </dependency>执行mvn dependency:copy-dependencies命令即可下载,然后复制相关的jar包到lib/ext目录下 8、至此php配置php-java-bridge就结束了。但无奈这里面坑比较多,分享几个运坑的案例 8.a https 访问 如果会报shutdownConnection on null,可能是你nginx服务器的问题,检查服务器的配置 8.b new 出来的java类调取static 方法 返回的值要加 string 进行强制类型转换 8.c 放jar包的时候一定要先将tomcat关闭,然后开启 9、只要没配置错环境,基本都能输出成功,亲测有效,码字不易,希望大家转载此文章时附本文链接。
版权声明:本文标题:史上最新 PHP 调用 jar包教程 内容由林淑君副主任自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.xiehuijuan.com/baike/1686922776a118628.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论