@contract-case/java-ast

中文文档
0.0.2发布于 2025/12/14TypeScriptCommonJS近 30 天下载 112.5万

这是一个 临时 叉数 @ impress/ java- ast (英语)它的存在是为了解决下列问题:

中文使用文档
文档目录11 节
  1. 范围和目的
  2. 安装
  3. 大楼
  4. 运行单元测试
  5. 发布到 npm
  6. 特征
  7. 基本用途
  8. 高级使用
  9. 创建接口
  10. 创建 Enums
  11. 许可证

@ contract-case/java-ast (英语)

这是一个 临时 叉数 @ impress/ java- ast (英语)它的存在是为了解决下列问题:

在编写本报告时,每期都有公开公关:

然而,这些尚未有任何活动,所以我不确定项目是否得到维持.

我并不想长期维持这个分叉 希望公关会合并到原来的仓库里.

原始读取如下.


@ impress/ java- ast (英语)

一个通过抽象语法树(AST)方法生成Java代码的库. 这个库允许您以类型安全的方式程序化生成Java代码.

范围和目的

Java AST 库并不是要覆盖所有的Java语言功能. 取而代之的是,它侧重于用Amprextion插件创建地基和锅炉板代码所需的元素. 库为生成结构完善的Java代码用于常见模式和使用案例提供构件.

当需要更专业或定制代码时 CodeBlock 类可以用作通用节点,可以包括任何代码作为字符串:

import { CodeBlock } from '@amplication/java-ast';

// Create a custom code block for specialized logic
const customLogic = new CodeBlock(`
  // Custom Java implementation
  try (BufferedReader reader = new BufferedReader(new FileReader(file))) {
    String line;
    while ((line = reader.readLine()) != null) {
      processLine(line);
    }
  } catch (IOException e) {
    logger.error("Error reading file", e);
  }
`);

// Add to your class or method

安装

npm install @amplication/java-ast

大楼

运行 nx build java-ast 来建造图书馆.

运行单元测试

运行 nx test java-ast 通过 欢乐。 。 。 .

发布到 npm

要发布到 npm @amplication/java-ast 数字 :

  1. 确保更新软件包中的版本. json.
  2. 运行如下 :
# From the monorepo root folder
npm i

npx nx build java-ast

cd ./dist/libs/java-ast

要将软件包发布为"beta"运行 :

npm publish --access public --tag beta

要将软件包发布为“ 最新” 运行 :


npm publish --access public
    

特征

  • 类型安全 Java 代码生成
  • 支持所有核心Java构造(类,界面,enum,方法,字段等)
  • 自动导入管理
  • JavaDoc 生成
  • 适当的代码格式化

基本用途

import {
  Class,
  Field,
  Method,
  Parameter,
  Type,
  Access,
  Annotation,
  ClassReference,
  CodeBlock,
  Writer
} from '@amplication/java-ast';

// Create a class
const userClass = new Class({
  name: 'User',
  packageName: 'com.example.model',
  access: Access.Public,
  annotations: [
    new Annotation({
      reference: new ClassReference({
        name: 'Entity',
        packageName: 'javax.persistence'
      })
    })
  ]
});

// Add fields
userClass.addField(new Field({
  name: 'id',
  type: Type.long(),
  access: Access.Private,
  annotations: [
    new Annotation({
      reference: new ClassReference({
        name: 'Id',
        packageName: 'javax.persistence'
      })
    }),
    new Annotation({
      reference: new ClassReference({
        name: 'GeneratedValue',
        packageName: 'javax.persistence'
      }),
      namedArguments: new Map([
        ['strategy', 'GenerationType.IDENTITY']
      ])
    })
  ]
}));

userClass.addField(new Field({
  name: 'username',
  type: Type.string(),
  access: Access.Private,
  javadoc: 'The username of the user.'
}));

// Add a constructor
userClass.addConstructor({
  access: Access.Public,
  parameters: [
    new Parameter({
      name: 'username',
      type: Type.string()
    })
  ],
  body: new CodeBlock({
    code: 'this.username = username;'
  })
});

// Add a method
userClass.addMethod(new Method({
  name: 'getUsername',
  access: Access.Public,
  parameters: [],
  returnType: Type.string(),
  body: new CodeBlock({
    code: 'return username;'
  })
}));

// Generate Java code
const writer = new Writer({ packageName: 'com.example.model' });
userClass.write(writer);
const javaCode = writer.toString();

console.log(javaCode);

产出如下:

package com.example.model;

import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;

@Entity
public class User {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private long id;

    /**
     * The username of the user.
     */
    private String username;

    public User(String username) {
        this.username = username;
    }

    public String getUsername() {
        return username;
    }
}

高级使用

创建接口

import { Interface, Method, Type, Access } from '@amplication/java-ast';

const repository = new Interface({
  name: 'UserRepository',
  packageName: 'com.example.repository',
  access: Access.Public,
  extends_: [
    new ClassReference({
      name: 'JpaRepository',
      packageName: 'org.springframework.data.jpa.repository'
    })
  ]
});

// Add methods to the interface
repository.addMethod(new Method({
  name: 'findByUsername',
  access: Access.Public,
  parameters: [
    new Parameter({
      name: 'username',
      type: Type.string()
    })
  ],
  returnType: Type.optional(Type.reference(
    new ClassReference({ name: 'User', packageName: 'com.example.model' })
  ))
}));

创建 Enums

import { Enum, Access } from '@amplication/java-ast';

const roleEnum = new Enum({
  name: 'Role',
  packageName: 'com.example.model',
  access: Access.Public,
  javadoc: 'User roles in the system.'
});

// Add enum values
roleEnum.addValue({ name: 'ADMIN' });
roleEnum.addValue({ name: 'USER' });
roleEnum.addValue({ name: 'GUEST' });

许可证

麻省理工学院

版本与发布记录

@contract-case/java-ast 共发布 1 个版本,首次发布于 2025/12/14;过去 12 个月发布了 1 个版本。

版本发布日期距今
0.0.2latest2025/12/1410 个月前

关于 @contract-case/java-ast 的常见问题

@contract-case/java-ast 是什么?

这是一个 临时 叉数 @ impress/ java- ast (英语)它的存在是为了解决下列问题:

如何安装 @contract-case/java-ast?

在项目目录运行 npm install @contract-case/java-ast,或使用 pnpm add / yarn add / bun add。

@contract-case/java-ast 支持 TypeScript 吗?

支持。包内自带 TypeScript 类型声明(package.json 声明了 types 入口),安装后即可获得类型提示,无需再安装 @types 包。

@contract-case/java-ast 支持 ESM 还是 CommonJS?

以 CommonJS 形式发布,可以直接 require();在 ES Module 项目中也可以用 import 引入(Node.js 会把 module.exports 作为默认导出)。

@contract-case/java-ast 可以商用吗?

@contract-case/java-ast 使用 未声明 许可。package.json 没有声明许可证。没有许可证的代码默认保留全部权利,商用前请联系作者或查看仓库中的 LICENSE 文件。以上为概括,不构成法律意见,请以许可原文为准。

@contract-case/java-ast 的下载量有多少?

根据 npm 官方下载统计,@contract-case/java-ast 在 2026/10/11 – 2026/11/09 这 30 天内被下载 1,125,114 次,日均约 37,504 次。下载量会把 CI 构建、镜像同步和作为其他包依赖的安装一并计入,适合横向比较热度,不能直接等同于使用人数。

@contract-case/java-ast 还在维护吗?

最新版本 0.0.2 发布于 2025/12/14(10 个月前);至今共发布 1 个版本,其中过去 12 个月发布了 1 个;首次发布于 2025/12/14。发布频率只是参考信号:功能稳定的工具可能很少需要更新,建议结合源码仓库的 issue 和提交记录判断。