• es4x 调用其他三方jar 包


    es4x 使用了graalvm 作为运行时环境,所以即拥有vertx 的强大,又拥有了与java 代码便捷的通信能力
    以下是一个简单的测试,同时也简单说明下es4x 的es4x-launcher.jar 的生成

    简单jar 包

    使用maven 构建,没有什么特殊的

    • pom.xml
     
    <?xml version="1.0" encoding="UTF-8"?>
    <project xmlns="http://maven.apache.org/POM/4.0.0"
             xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
             xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
        <modelVersion>4.0.0</modelVersion>
        <groupId>com.dalong.nodeapi</groupId>
        <artifactId>nodejsapi</artifactId>
        <version>1.0-SNAPSHOT</version>
       <properties>
           <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
           <encoding>UTF-8</encoding>
           <java.version>1.8</java.version>
           <maven.compiler.source>1.8</maven.compiler.source>
           <maven.compiler.target>1.8</maven.compiler.target>
       </properties>
        <distributionManagement>
            <repository>
                <id>github</id>
                <name>GitHub OWNER Apache Maven Packages</name>
                <url>https://maven.pkg.github.com/rongfengliang/es4x-userlogin-deploy</url>
            </repository>
        </distributionManagement>
    </project>
    • 代码
      src/main/java/com.dalong/UserLogin.java
     
    package com.dalong;
    public class UserLogin {
        public String getName() {
            return name;
        }
        public void setName(String name) {
            this.name = name;
        }
        public int getAge() {
            return age;
        }
        public void setAge(int age) {
            this.age = age;
        }
        private String name;
        private int age;
        public String token(String name,String password) {
            return String.format("%s--%s",name,password);
        }
    }
    • 构建jar包
    mvn clean package

    es4x 项目

    使用cli 工具创建的简单web 项目

    • 项目结构
    ├── README.md
    ├── app.sh
    ├── index.js
    ├── index.ts
    ├── nodejsapi-1.0-SNAPSHOT.jar
    ├── package-lock.json
    ├── package.json
    ├── tsconfig.json
    └── yarn.lock
    • 代码说明
      index.js 通过typescript 编译的文件
      index.ts 基于typescript 编写的入口
     
    /// <reference path="node_modules/@types/es4x.d.ts" />
    import { Router } from '@vertx/web';
    // call jvm build in typee
    const BigInteger =Java.type("java.math.BigInteger")
    const app = Router.router(vertx);
    // call  custom type 
    const UserLogin = Java.type("com.dalong.UserLogin")
    app.route('/').handler((ctx) => {
      let msg = BigInteger.valueOf(10).pow(100)
      // create new instance 
      let userlogin = new UserLogin();
      // call instance method
      let token = userlogin.token("dalong","appdemo")
      ctx.response().end(`Hello from Vert.x Web! ${msg} 
    ---${token}`);
    });
    vertx.createHttpServer()
      .requestHandler(app.handle)
      .listen(8090);
    • pacakge.json
    {
      "version": "1.0.0",
      "description": "This is a ES4X empty project.",
      "main": "index.js",
      "scripts": {
        "test": "es4x test index.test.js",
        "postinstall": "es4x install",
        "build": "tsc -w",
        "start": "es4x -cp=:./"
      },
      "keywords": [],
      "author": "",
      "license": "ISC",
      "name": "es4x-app",
      "devDependencies": {
        "@vertx/unit": "^3.8.3",
        "typescript": "^3.7.2"
      },
      "dependencies": {
        "@vertx/core": "^3.8.3",
        "@vertx/web": "^3.8.3"
      }
    }
    • 安装依赖
      注意此处是核心,因为es4x 是在npm 的post 阶段调用了es4x install 然后生成运行时环境的jar 文件
      jar 文件制定了class-path 对于不是系统自己的,或者安装标准es4x 开发的额npm 是无法添加到的
    yarn 
    • 删除es4x-launcher.jar 手工生成包含自己jar class path 配置
    rm -rf node_modules/.bin/es4x-launcher.jar node_modules/.bin/es4x-launcher 
    // -v 代表有自己的jar
    es4x install -v nodejsapi-1.0-SNAPSHOT.jar
    • 运行es4x 应用
      注意需要copy 自己的jar 文件到node_modules/.lib 文件夹,后边会详细说明
    yarn start 
    • 效果
    yarn start
    yarn run v1.19.1
    $ es4x
    Succeeded in deploying verticle
    • 访问
    curl -i http://localhost:8090
     

    es4x-launcher.jar 文件说明

    es4x-launcher.jar 文件是调用代码,生成的,默认生成的jar清单文件如下


    如果需要三方依赖主要就是claa path, 目录文件.lib 放自己的jar 包 也没有用,所以打包带入可以使用-v 参数
    如下为带-v 生成的jar 清单文件

    install 简单说明

    • 生成jar install方法


    artifacts 获取方法


    • npm 包格式

    • 方法暴露

    说明

    从以上代码也可以看出来主要还是npm包暴露pacakge.json 中定义的mvn 依赖,然后调用maven 的依赖解析,处理依赖的构件
    实际上我们也可以自己基于此模式,开发符合标准的npm 包,这样就可以不用使用自定义参数依赖jar了,这样可以无缝的与nodejs
    环境集成

    参考资料

    https://sourcegraph.com/github.com/reactiverse/es4x/-/blob/pm/src/main/java/io/reactiverse/es4x/commands/Install.java#L174:5
    https://github.com/reactiverse/es4x

  • 相关阅读:
    发一个多维数组转xml格式的php函数方法
    php 返回json和jsonp格式
    phpstudy修改端口及网站根目录和访问 localhost 显示目录文件夹
    web后端开发语言Java和PHP的比较
    VSCode 的PHP常用插件及安装
    Nginx服务器的Websockets配置方法
    WebSocket-demo
    前端资源
    HTTPS 升级指南
    HTTP 协议入门
  • 原文地址:https://www.cnblogs.com/rongfengliang/p/11906794.html
Copyright © 2020-2023  润新知