INRIA/spoon
GitHub: INRIA/spoon
Spoon 是一个用于分析、重写和转换 Java 源代码的元编程库,通过构建完善的 AST 提供强大的代码分析与改写能力。
Stars: 1903 | Forks: 377
[](https://search.maven.org/#search%7Cga%7C1%7Cg%3A%22fr.inria.gforge.spoon%22%20AND%20a%3A%22spoon-core%22)
[](https://github.com/INRIA/spoon/actions/workflows/tests.yml)
[](https://coveralls.io/r/INRIA/spoon)
[](https://sonarqube.ow2.org/dashboard?id=fr.inria.gforge.spoon%3Aspoon-core)
[](https://github.com/jvm-repo-rebuild/reproducible-central#fr.inria.gforge.spoon:spoon-core)
# Spoon
Spoon 是一个用于分析、重写、转换和转译 Java 源代码的开源库。它解析源文件以构建具有强大分析和转换 API 的设计良好的 AST。它支持最高至 Java 25 的现代 Java 版本。Spoon 是 Inria 的官方开源项目,也是 [OW2](https://www.ow2.org/) 开源联盟的成员。
## 文档
最新的官方文档可在 获取。
### 学术用途
如果您将 Spoon 用于学术目的,请引用:Renaud Pawlak, Martin Monperrus, Nicolas Petitprez, Carlos Noguera, Lionel Seinturier. “[Spoon: A Library for Implementing Analyses and Transformations of Java Source Code](https://hal.archives-ouvertes.fr/hal-01078532/document)”。刊于 Software: Practice and Experience, Wiley-Blackwell, 2015. Doi: 10.1002/spe.2346.
```
@article{pawlak:hal-01169705,
TITLE = "{Spoon: A Library for Implementing Analyses and Transformations of Java Source Code}",
AUTHOR = {Pawlak, Renaud and Monperrus, Martin and Petitprez, Nicolas and Noguera, Carlos and Seinturier, Lionel},
JOURNAL = "{Software: Practice and Experience}",
PUBLISHER = "{Wiley-Blackwell}",
PAGES = {1155-1179},
VOLUME = {46},
URL = {https://hal.archives-ouvertes.fr/hal-01078532/document},
YEAR = {2015},
doi = {10.1002/spe.2346},
}
```
### 专业支持
如果您需要关于 Spoon 的专业支持(开发、培训、扩展),欢迎在 https://github.com/INRIA/spoon/issues/3251 发表评论
## 2 秒快速入门
**Java 版本要求:**
- Spoon 11.x 需要 JDK 17 或更高版本。
- Spoon 10.x 需要 JDK 11 或更高版本。
- Spoon 9.x 需要 Java 8。
请注意,Spoon 当然仍然可以使用较旧版本的 Java 源代码,但它需要上述提到的 JDK 版本才能运行。
通过 Maven 获取最新的稳定版本,请参阅
并开始使用它:
```
CtClass l = Launcher.parseClass("class A { void m() { System.out.println(\"yeah\");} }");
```
文档:
- 参考文档: (包含 [doc 文件夹](https://github.com/INRIA/spoon/tree/master/doc) 的内容)
- 代码示例:
- 视频:[Spoon:入门指南 - Simon Urli @ OW2Con'18 (巴黎)](https://www.youtube.com/watch?v=ZZzdVTIu-OY),[使用 Spoon 生成测试断言 - Benjamin Danglot @ OW2Con'17 (巴黎)](https://www.youtube.com/watch?v=JcCIbjnkfD4)
## 2 秒参与贡献
创建您的第一个 pull request 来改进文档,请参阅 [doc](https://github.com/INRIA/spoon/tree/master/doc)!继续您的第一个 bug 修复!社区心态开放、尊重且耐心。欢迎所有外部贡献。
## 设计理念
R1) Spoon 元模型尽可能贴近语言概念。
R2) 程序的 Spoon 模型是完整且合理的。
R3) Spoon 模型的文本版本格式正确,并且在语义上等同于原始程序。
R4) 分析和转换 API 直观且规范。
R5) 转换操作符旨在尽快针对无效程序发出警告。这是通过静态类型检查或在使用操作符时进行动态检查来完成的。
R6) 在可行的情况下,Spoon 模型的文本版本接近原始版本。
### 编译
要编译 Spoon,您需要一个 Java Development Kit (JDK) 和 Maven:
```
git clone https://github.com/INRIA/spoon
cd spoon
mvn compile
```
要运行测试:
```
mvn test
```
## 发布版本
请参阅 [Releases](https://github.com/INRIA/spoon/releases)
## 许可证
Spoon 是自由且开源的,双许可下授权:([CeCILL-C 许可证](https://cecill.info/licences.en.html) - 相当于法国的 LGPL) 和 MIT 许可证。
### 支持者
[](https://jb.gg/OpenSource)
## Github 贡献者
此列表由 `chore/generate-contributor-list.py` 生成。如果您未在列表中或希望显示您的全名,请在 https://github.com/INRIA/spoon/issues/3909 发帖。
* adamjryan
* Alcides Fonseca
* Alexander Shopov
* Aman Sharma
* andrewbwogi
* André Cruz
* André Silva
* Antoine Mottier
* Anton Lyxell
* argius
* Arnaud Blouin
* arsenkhy
* Artamm
* Artur Bosch
* Arvid Siberov
* aryan
* Ashutosh Kumar Verma
* aveuiller
* Axel Howind
* Benjamin DANGLOT
* Benoit Cornu
* Carlos Noguera
* Ceki Gülcü
* chammp
* Charm
* ChrisSquare
* Christophe Dufour
* Christopher Stokes
* Clemens Bartz
* Clément Fournier
* César Soto Valero
* Daniel Bobbert
* Darius Sas
* David Bernard
* Didier Donsez
* Diorcet Yann
* Dorota Kopczyk
* dufaux
* dwayneb
* dya-tel
* Eddie T
* Egor Bredikhin
* Fabien DUMINY
* Fan Long
* fangzhen
* fav
* Favio DeMarco
* Fernanda Madeiral
* Filip Krakowski
* Gabriel Chaperon Burgos
* gibahjoe
* GitHub Actions Bot
* GluckZhang
* Gregor Zeitlinger
* gtoison
* Guillaume Toison
* Gérard Paligot
* Hannes Greule
* Haris Adzemovic
* HectorSM
* Henry Chu
* Hervé Boutemy
* Horia Constantin
* I-Al-Istannen
* intrigus-lgtm
* jakobbraun
* Jan Galinski
* jon
* Kai Luo
* Lakshya A Agrawal
* leventov
* Lionel Seinturier
* lodart
* Lucas
* Lukas Krejci
* Luke Merrick
* Marcel Manseer
* Marcel Steinbeck
* Martin Monperrus
* Martin Wittlinger
* MartinWitt
* Matias Martinez
* Maxim Stefanov
* Maxime CLEMENT
* Mehdi Kaytoue
* Michael Täge
* Mickael Istria
* Miguel Sozinho Ramalho
* Mikael Forsberg
* Mr. Pine
* Muhammet Ali AKBAY
* Nicolas Harrand
* Nicolas Pessemier
* Nicolas Petitprez
* Noah Santschi-Cooney
* Olivier Barais
* Ondřej Šebek
* Patrick Schmitt
* Pavel Vojtechovsky
* peroksid90
* Philippe Ombredanne
* Phillip Schichtel
* priyanka-28
* Quentin LE DILAVREC
* raymogg
* Renaud Pawlak
* Reza Gharibi
* Rhys Compton
* Rick Kellogg
* Rijnard van Tonder
* Rohitesh Kumar Jain
* Roman Leventov
* Ryota Hiyoshi
* Sander Ploegsma
* santos-samuel
* scootafew
* Scott Dickerson
* Scott Pinwell
* Sebastian Lamelas Marcote
* Sergey Fedorov
* Shantanu
* Simon Larsén
* Simon Urli
* Spencer Williams
* srlm
* ST0NEWALL
* Stefan Wolf
* StepSecurity Bot
* Sébastien Bertrand
* The Spoon Bot
* Thimo Seitz
* Thomas Durieux
* tiagodrcarvalho
* Tomasz Zieliński
* Urs Keller
* Viktor
* Vincenzo Musco
* Wolfgang Schmiesing
* Wouter Smeenk
* Wreulicke
* Yann Diorcet
* Yogya Tulip Gamage
* Zhang Xindong
* Дмитрий
标签:DNS 反向解析, IP 地址批量处理, Java代理, Java编译器, JS文件枚举, Maven, odt, OW2, 云安全监控, 云资产清单, 代码生成, 代码解析, 代码转换, 代码重写, 元编程, 可配置连接, 域名枚举, 域名枚举, 威胁情报, 开发者工具, 开源库, 抽象语法树, 搜索引擎爬虫, 数据管道, 渗透测试工具, 源代码分析, 漏洞验证, 程序分析, 自动化payload嵌入, 自动化重构, 语法树操作, 软件工程, 逆向工程, 静态分析, 静态检测