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} \r\n---${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

es4x 调用其他三方jar 包的更多相关文章

  1. 分享:根据webservice WSDL地址自动生成java调用代码及JAR包

    分享:根据webservice WSDL地址自动生成java调用代码及JAR包使用步骤:一.安装java 并配置JAVA_HOME 及 path二.安装ANT 并配置ANT_HOME三.解压WsdlT ...

  2. Kettle中调用用户自定义的jar包

    ETL工具断断续续的也接触了 Informatica,Kettle, SSIS,个人感觉Info很强大但是也很贵,而且有着一些神秘感.Kettle 4.0版本以来已经有了User  defined j ...

  3. 不要轻易在java ext 目录放任何三方jar包

    今天在编写一个简单spi 应用demo的时候,在编译时总有一个其他的错误,如下: ERROR Failed to execute goal org.apache.maven.plugins:maven ...

  4. C++调用Java的Jar包

    一个简单需求:用C++调用Jar包. 实现基本思路:调用CreateProcess API来启动cmd.exe执行jar包. 调用类CJarAppCall. JarAppCall.h #pragma ...

  5. jmeter接口测试-调用java的jar包-csv参数化请求-BeanShellPreProcessor生成验签作为请求验证参数-中文乱码----实战

    背景及思路: 需求:要做 创建新卡 接口的测试,要求: 1. 不需要每次手动修改请求参数. 方案:文中先用excle将数据准备好,导出为csv格式,再用jmeter的csv请求进行参数化 2. 卡号需 ...

  6. unity调用Android的jar包

    简介 有一些手机功能,Unity没有提供相应的接口,例如震动,例如不锁屏,例如GPS,例如... 有太多的特殊功能Unity都没有提供接口,这时候,我们就需要通过使用Android原生的ADT编辑器去 ...

  7. 使用 jpype 库实现 Python 调用 java 的 jar 包中的功能

    一.what's the JPype JPype 是一个能够让 python 代码方便地调用 Java 代码的工具.在某些时候 java 的能力更强,我们可以用 java 写一个模块的功能然后用 Py ...

  8. springboot引用三方jar包

    在springboot项目中可能会用到三方工具类(比如接入短信网关时给出的工具jar包),这时候需要在springboot项目中手动引入进来 1. springboot工程目录, lib/ucpaas ...

  9. PHP通过php-java-bridge调用JAVA的jar包里class类

    正 文:   有的时候我们需要在PHP里调用JAVA平台封装好的jar包里的class类和方法,一般飘易推荐的做法是采用php-java-bridge做桥接,本文就来介绍一下大致的实现方法. 先简单说 ...

随机推荐

  1. maven setting 配置仓库,pom.xml中repository不起作用

    问题描述 最近做java项目,需要使用公司自己搭建的maven仓库,但是有些包公司的仓库中没有,导致下载失败. 项目环境 jdk:1.8 maven:3.5 问题原因分析 maven的setting文 ...

  2. 【记录】【idea】【mysql】Server returns invalid timezone. Go to 'Advanced' tab and set 'serverTimezone' property manually.解决问题

    idea连接mysql报错Server returns invalid timezone. Go to 'Advanced' tab and set 'serverTimezone' property ...

  3. 【leetcode-198】打家劫舍

    你是一个专业的小偷,计划偷窃沿街的房屋.每间房内都藏有一定的现金,影响你偷窃的唯一制约因素就是相邻的房屋装有相互连通的防盗系统,如果两间相邻的房屋在同一晚上被小偷闯入,系统会自动报警. 给定一个代表每 ...

  4. Jmeter使用笔记1

    1.简介 jmeter 是一款专门用于功能测试和压力测试的轻量级测试开发平台.多数情况下是用作压力测试,该测试工具在阿里巴巴有着广泛的使用. 2.安装 下载apache-jmeter-3.1.rar; ...

  5. Blend Grid行列拖拽控制宽高

    原文:Blend Grid行列拖拽控制宽高 看效果 <Grid> <Grid.ColumnDefinitions> <ColumnDefinition Width=&qu ...

  6. MongoDB下载+安装+配置+错误解决方法

    下载 官网下载: https://www.mongodb.com/download-center/community Server=>Download 安装 下载完成后安装 建议下载根目录(下过 ...

  7. 有哪位大侠操作过NPOI生成word文档,如何设置页眉页脚距离顶部和底部距离?

    #region 1.创建文档(页眉.页脚) XWPFDocument doc = new XWPFDocument(); //页面设置 A4:w=11906 h=16838 doc.Document. ...

  8. K8S CoreDNS部署失败,问题分析

    1. 查询k8s集群部署pod的基本情况 如下图,我们可知容器coredns和dnsutils都部署成功,但是由于域名解析的问题,导致coredns和dnsutils的容器不断重启(原因heath检查 ...

  9. 2019 中细软java面试笔试题 (含面试题解析)

      本人5年开发经验.18年年底开始跑路找工作,在互联网寒冬下成功拿到阿里巴巴.今日头条.中细软等公司offer,岗位是Java后端开发,因为发展原因最终选择去了中细软,入职一年时间了,也成为了面试官 ...

  10. 华为手机usb调试打开后自动关闭怎么办?华为手机 usb调试为什么自动关闭?usb调试老是自动关闭怎么回事?

    01 解决方法一依次点击“设置”——“系统”——“开发人员选项”先开启“开发者选项”开关. 02 然后在开启“USB调试”开关后,一并将“'仅充电'模式下允许ADB调试”选项开关打开.这样,华为手机u ...