如果您是需要从头开始编写Web前端的Java开发人员,则此工具会派上用场

发布于:2021-01-15 10:50:04

0

185

0

Java JavaScript Web前端

如果您是需要从头开始编写Web前端的Java开发人员,TeaVM是Java字节码到JavaScript的提前编译器,可能会派上用场。但是,如果您想使用Java或Kotlin获得现有的大型代码库并生成JavaScript,那么您来错了地方。

Java开发人员,您的工具箱是什么样的?如果您需要从头开始编写Web前端,这里还有一个工具可能会派上用场。 TeaVM是Java字节码的提前编译,并且能够发出JavaScript和WebAssembly。

尽管其“近亲”是GWT,但不同之处在于“ TeaVM依赖于现有的编译器,无论是javac,kotlinc还是scalac”。这些编译器产生的字节码(*.class 或 *.jar 文件),然后TeaVM借此字节码,并产生JavaScript代码,”根据项目描述。

如果您是曾经编写后端代码的Java(或Kotlin或Scala)开发人员,那么TeaVM可能是您的选择。一个优秀的开发人员(包括Java开发人员)确实可以学习JavaScript。但是,要成为专家,您必须花费合理的时间。

你可以在以下情况使用TeaVM:

  • 您是一名Java开发人员,您将从头开始编写web前端。

  • 您已经有了基于java的后端,并且希望将前端代码紧密地集成到现有的开发基础设施中。

  • 您需要在前端重用一些Java后端代码。

  • 您已经准备好重写代码以与TeaVM一起工作了。

TeaVM的优点:

  • 它尝试重建方法的原始结构,因此在大多数情况下,它会生成您需要手工编写的JavaScript。没有臃肿的while/switch语句,不熟悉的编译器通常会这样做。

  • 它支持线程。

  • 它是快的

  • 它生成源图;teamm IDEA插件允许在IDE中调试代码。

还有一个子项目叫做Flavour。

它是什么:一个编写单页web应用程序的框架(可以与后端代码一起使用)

它不是什么:一个服务器端框架。你应该使用像OpenJDK这样的“普通”JDK来编写后端代码,或者使用你喜欢的框架来编写Oracle JDK。

运行TeaVM最简单的方法是使用TeaVM -maven-plugin。这里有一个例子:

<project>   ...   <build>     <plugins>       <plugin>         <groupId>org.teavm</groupId>         <artifactId>teavm-maven-plugin</artifactId>         <version>0.5.1</version>         <dependencies>           <!-- This dependency is required by TeaVM to emulate subset of Java class library -->           <dependency>             <groupId>org.teavm</groupId>             <artifactId>teavm-classlib</artifactId>             <version>0.5.1</version>           </dependency>         </dependencies>         <executions>           <execution>             <goals>               <goal>compile</goal>             </goals>             <phase>process-classes</phase>             <configuration>               <mainClass>org.teavm.samples.HelloWorld</mainClass>               <mainPageIncluded>true</mainPageIncluded>               <debugInformationGenerated>true</debugInformationGenerated>               <sourceMapsGenerated>true</sourceMapsGenerated>             </configuration>           </execution>         </executions>       </plugin>     </plugins>   </build> </project>