es4x 調用其餘三方jar 包

es4x 使用了graalvm 做爲運行時環境,因此即擁有vertx 的強大,又擁有了與java 代碼便捷的通訊能力
如下是一個簡單的測試,同時也簡單說明下es4x 的es4x-launcher.jar 的生成java

簡單jar 包

使用maven 構建,沒有什麼特殊的node

  • 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 項目react

  • 項目結構
├── 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清單文件以下
git

 

 


若是須要三方依賴主要就是claa path, 目錄文件.lib 放本身的jar 包 也沒有用,因此打包帶入可使用-v 參數
以下爲帶-v 生成的jar 清單文件
github

 

 

install 簡單說明

  • 生成jar install方法

 

 


artifacts 獲取方法
web

 

 


 

 

  • npm 包格式

 

 

  • 方法暴露

 

 

說明

從以上代碼也能夠看出來主要仍是npm包暴露pacakge.json 中定義的mvn 依賴,而後調用maven 的依賴解析,處理依賴的構件
實際上咱們也能夠本身基於此模式,開發符合標準的npm 包,這樣就能夠不用使用自定義參數依賴jar了,這樣能夠無縫的與nodejs
環境集成typescript

參考資料

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

相關文章
相關標籤/搜索