史上最新 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('http://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') . '
'; // echo 'Java vendor=' . $system->getProperty('java.vendor') . '
'; // echo 'OS=' . $system->getProperty('os.name') . ' ' . // $system->getProperty('os.version') . ' on ' . // $system->getProperty('os.arch') . '
'; // // 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 '
'; //下面是php调用自己编写的test.java的方法。 $test=new Java("Test"); $test->setName("aaaaaaaaa"); echo "vvv
"; echo "bbb
";

5、注意点:
a、开启tomcat
b、require_once http://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 依赖可移步(https://www.cnblogs.com/liuhongfeng/p/5057827.html)
如果jar包中依赖其它的jar包,则可以通过maven配置仓库,我这个就没配置,直接通过maven下载相关jar包到本地,然后相关文件自行引用即可。那么怎么通过maven去批量下载相关包呢。
初始化Maven本地仓库
在命令行窗口中输入mvn help:system
在执行该命令的过程中,会生成./m2文件夹(~ 代表操作系统的当前用户目录),也就是本地仓库,并且会从Maven官网下载必要的依赖包到本地仓库。
在pom.xml添加如下配置(你所用到的jar包):

 //     commons-lang
 //     commons-lang
 //     2.6
 //   
 //   
 //     dom4j
 //     dom4j
 //     1.6.1
 //   
 //   
 //     org.bouncycastle
 //     bcprov-jdk16
 //     1.46
 //   

执行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)