zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    4 Apr 18 软件开发目录 logging模块的使用 序列化(Json, Pickle) os模块
    3 Apr 18 内置函数 列表生成式与生成器表达式 模块的使用之import 模块的使用之from…import…
    2 Apr 18 三元表达式 函数递归 匿名函数 内置函数
    30 Mar 18 迭代器 生成器 面向过程的编程
    29 Mar 18 函数 有参、无参装饰器
    28 Mar 18 函数
    27 Mar 18 函数的参数
    26 Mar 18 函数介绍
    23 Mar 18 文件处理
    22 Mar 18 补充数据类型+字符编码+文件处理
  • 原文地址:https://www.cnblogs.com/rongfengliang/p/11906794.html
Copyright © 2011-2022 走看看