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. Qt Quick 常用元素:TabView(选项卡) 与 Slider(滑块)

    一.TabView TabView 可以实现类似 Windows 任务管理器的界面,有人叫 TabView 为标签控件,有人又称之为选项卡控件,我们知道它就是这么个东西就行了.现在来介绍 TabVie ...

  2. 使用Django REST框架创建一个简单的Api

    Create a Simple API Using Django REST Framework in Python WHAT IS AN API API stands for application ...

  3. SWIG 3 中文手册——4. 脚本语言

    目录 4 脚本语言 4.1 两种语言的概览 4.2 脚本语言如何调用 C? 4.2.1 包装器函数 4.2.2 变量链接 4.2.3 常量 4.2.4 结构体与类 4.2.5 代理类 4.3 构建脚本 ...

  4. 前端与算法 leetcode 387. 字符串中的第一个唯一字符

    目录 # 前端与算法 leetcode 387. 字符串中的第一个唯一字符 题目描述 概要 提示 解析 解法一:双循环 解法二:Set法单循环 算法 传入测试用例的运行结果 执行结果 GitHub仓库 ...

  5. Vue.js 源码分析(五) 基础篇 方法 methods属性详解

    methods中定义了Vue实例的方法,官网是这样介绍的: 例如:: <!DOCTYPE html> <html lang="en"> <head&g ...

  6. Windbg断点调试.net程序

    程序员都知道,在生产环境中,如果没有系统日志,对问题的分析将非常的困难.即使有日志,有时候也会因为日志记录的不全面,而导致问题不能分析清楚.其实,Windbg里面有Live Debug功能,正好可以借 ...

  7. hibernate中many-to-one的not-found属性和@notfound注解

    如果在Hibernate项目里面配了很多many-to-one的关联,即使后台在查询数据时已经作了健全性判断,但还是会经常抛出对象找不到异常:org.hibernate.ObjectNotFoundE ...

  8. 【生活现场】从诗词大会飞花令到elasticsearch原理解析(转)

    add by zhj:  作者是阿里的技术专家,把技术解释的通俗易懂,太牛了.该文转自作者的个人公众号:互联网侦察,里面有很多系列文章, 关于算法,大数据,面试现场三个系列,通过漫画学到知识,太棒了 ...

  9. 『Norma 分治』

    Norma Description Input Format 第1行,一个整数N: 第2~n+1行,每行一个整数表示序列a. Output Format 输出答案对10^9取模后的结果. Sample ...

  10. jQuery实现C#CheckBoxList模糊搜索

    前言 最近开发的一套系统中需要对商品进行管理,在选择商品时,要分别从品牌.型号.商品三个类别分别选择对应的选项才能找到需要的商品,三者的关系为:品牌包含型号,型号包含商品,因此使用了三个不同的 asp ...