make example-graalvm-native work
This commit is contained in:
parent
7dfba0979c
commit
271b2cc710
6
example-graalvm-native/README.md
Normal file
6
example-graalvm-native/README.md
Normal file
@ -0,0 +1,6 @@
|
||||
# build & run
|
||||
|
||||
```shell
|
||||
mvn clean package -Pnative -DskipTests
|
||||
./target/my-app
|
||||
```
|
@ -34,8 +34,8 @@
|
||||
<java.version>17</java.version>
|
||||
<maven.compiler.source>17</maven.compiler.source>
|
||||
<maven.compiler.target>${maven.compiler.source}</maven.compiler.target>
|
||||
|
||||
<native.maven.plugin.version>0.9.19</native.maven.plugin.version>
|
||||
<maven-jar-plugin.version>3.2.2</maven-jar-plugin.version>
|
||||
<fastjson2.version>2.0.24-SNAPSHOT</fastjson2.version>
|
||||
<imageName>fastjson2-example-graalvm-native</imageName>
|
||||
</properties>
|
||||
|
||||
@ -92,15 +92,9 @@
|
||||
<dependency>
|
||||
<groupId>com.alibaba.fastjson2</groupId>
|
||||
<artifactId>fastjson2</artifactId>
|
||||
<version>${project.version}</version>
|
||||
<version>${fastjson2.version}</version>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>org.graalvm.buildtools</groupId>
|
||||
<artifactId>junit-platform-native</artifactId>
|
||||
<version>${native.maven.plugin.version}</version>
|
||||
<scope>test</scope>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.junit.platform</groupId>
|
||||
<artifactId>junit-platform-launcher</artifactId>
|
||||
@ -112,36 +106,64 @@
|
||||
<build>
|
||||
<plugins>
|
||||
<plugin>
|
||||
<groupId>org.graalvm.buildtools</groupId>
|
||||
<artifactId>native-maven-plugin</artifactId>
|
||||
<version>${native.maven.plugin.version}</version>
|
||||
<extensions>true</extensions>
|
||||
<executions>
|
||||
<execution>
|
||||
<id>build-native</id>
|
||||
<goals>
|
||||
<goal>compile-no-fork</goal>
|
||||
</goals>
|
||||
<phase>package</phase>
|
||||
</execution>
|
||||
<execution>
|
||||
<id>test-native</id>
|
||||
<goals>
|
||||
<goal>test</goal>
|
||||
</goals>
|
||||
<phase>test</phase>
|
||||
</execution>
|
||||
</executions>
|
||||
<groupId>org.apache.maven.plugins</groupId>
|
||||
<artifactId>maven-jar-plugin</artifactId>
|
||||
<version>${maven-jar-plugin.version}</version>
|
||||
<configuration>
|
||||
<skip>false</skip>
|
||||
<useArgFile>false</useArgFile>
|
||||
<imageName>${imageName}</imageName>
|
||||
<fallback>false</fallback>
|
||||
<classpath>
|
||||
<param>${project.build.directory}/${project.artifactId}-${project.version}-shaded.jar</param>
|
||||
</classpath>
|
||||
<archive>
|
||||
<manifest>
|
||||
<mainClass>com.alibaba.fastjson2.example.graalvm_native.App</mainClass>
|
||||
</manifest>
|
||||
</archive>
|
||||
</configuration>
|
||||
</plugin>
|
||||
</plugins>
|
||||
</build>
|
||||
|
||||
<profiles>
|
||||
<profile>
|
||||
<id>native</id>
|
||||
<build>
|
||||
<plugins>
|
||||
<plugin>
|
||||
<groupId>org.graalvm.buildtools</groupId>
|
||||
<artifactId>native-maven-plugin</artifactId>
|
||||
<version>0.9.19</version>
|
||||
<extensions>true</extensions>
|
||||
<executions>
|
||||
<execution>
|
||||
<id>build-native</id>
|
||||
<goals>
|
||||
<goal>build</goal>
|
||||
</goals>
|
||||
<phase>package</phase>
|
||||
</execution>
|
||||
<execution>
|
||||
<id>test-native</id>
|
||||
<goals>
|
||||
<goal>test</goal>
|
||||
</goals>
|
||||
<phase>test</phase>
|
||||
</execution>
|
||||
</executions>
|
||||
<configuration>
|
||||
<imageName>my-app</imageName>
|
||||
<buildArgs>
|
||||
<buildArg>-H:+ReportExceptionStackTraces</buildArg>
|
||||
<!-- <buildArg>-H:+StaticExecutableWithDynamicLibC</buildArg> -->
|
||||
<buildArg>--verbose</buildArg>
|
||||
<!-- For Quick Build (22.1+) -->
|
||||
<buildArg>-Ob</buildArg>
|
||||
</buildArgs>
|
||||
<!-- Start: Workaround for 22.2: Disable the default Java Module Path using USE_NATIVE_IMAGE_JAVA_PLATFORM_MODULE_SYSTEM -->
|
||||
<!-- <environment>
|
||||
<USE_NATIVE_IMAGE_JAVA_PLATFORM_MODULE_SYSTEM>false</USE_NATIVE_IMAGE_JAVA_PLATFORM_MODULE_SYSTEM>
|
||||
</environment> -->
|
||||
<!-- End: Workaround for 22.2: Disable the default Java Module Path using USE_NATIVE_IMAGE_JAVA_PLATFORM_MODULE_SYSTEM -->
|
||||
</configuration>
|
||||
</plugin>
|
||||
</plugins>
|
||||
</build>
|
||||
</profile>
|
||||
</profiles>
|
||||
</project>
|
||||
|
@ -0,0 +1,321 @@
|
||||
package com.alibaba.fastjson2.example.graalvm_native;
|
||||
|
||||
import com.alibaba.fastjson2.JSON;
|
||||
import com.alibaba.fastjson2.reader.ObjectReaders;
|
||||
import com.alibaba.fastjson2.writer.ObjectWriters;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
import static com.alibaba.fastjson2.reader.ObjectReaders.*;
|
||||
import static com.alibaba.fastjson2.reader.ObjectReaders.fieldReaderString;
|
||||
|
||||
public class App {
|
||||
public static void main(String[] args) throws Exception {
|
||||
String str = "{\"images\": [{\n" +
|
||||
" \"height\":768,\n" +
|
||||
" \"size\":\"LARGE\",\n" +
|
||||
" \"title\":\"Javaone Keynote\",\n" +
|
||||
" \"uri\":\"http://javaone.com/keynote_large.jpg\",\n" +
|
||||
" \"width\":1024\n" +
|
||||
" }, {\n" +
|
||||
" \"height\":240,\n" +
|
||||
" \"size\":\"SMALL\",\n" +
|
||||
" \"title\":\"Javaone Keynote\",\n" +
|
||||
" \"uri\":\"http://javaone.com/keynote_small.jpg\",\n" +
|
||||
" \"width\":320\n" +
|
||||
" }\n" +
|
||||
" ],\n" +
|
||||
" \"media\": {\n" +
|
||||
" \"bitrate\":262144,\n" +
|
||||
" \"duration\":18000000,\n" +
|
||||
" \"format\":\"video/mpg4\",\n" +
|
||||
" \"height\":480,\n" +
|
||||
" \"persons\": [\n" +
|
||||
" \"Bill Gates\",\n" +
|
||||
" \"Steve Jobs\"\n" +
|
||||
" ],\n" +
|
||||
" \"player\":\"JAVA\",\n" +
|
||||
" \"size\":58982400,\n" +
|
||||
" \"title\":\"Javaone Keynote\",\n" +
|
||||
" \"uri\":\"http://javaone.com/keynote.mpg\",\n" +
|
||||
" \"width\":640\n" +
|
||||
" }\n" +
|
||||
"}";
|
||||
|
||||
registerReaderAndWriter();
|
||||
|
||||
MediaContent mediaContent = JSON.parseObject(str, MediaContent.class);
|
||||
|
||||
int LOOP_COUNT = 1000000;
|
||||
for (int j = 0; j < 5; ++j) {
|
||||
long start = System.currentTimeMillis();
|
||||
for (int i = 0; i < LOOP_COUNT; i++) {
|
||||
JSON.toJSONString(mediaContent);
|
||||
}
|
||||
long millis = System.currentTimeMillis() - start;
|
||||
System.out.println("fastjson2 eishay toJSONString time : " + millis);
|
||||
}
|
||||
for (int j = 0; j < 5; ++j) {
|
||||
long start = System.currentTimeMillis();
|
||||
for (int i = 0; i < LOOP_COUNT; i++) {
|
||||
JSON.parseObject(str, MediaContent.class);
|
||||
}
|
||||
long millis = System.currentTimeMillis() - start;
|
||||
System.out.println("fastjson2 eishay parseObject time : " + millis);
|
||||
}
|
||||
}
|
||||
|
||||
private static void registerReaderAndWriter() {
|
||||
JSON.register(MediaContent.class, ObjectWriters.objectWriter(
|
||||
MediaContent.class,
|
||||
ObjectWriters.fieldWriter("media", Media.class, (MediaContent e) -> e.getMedia()),
|
||||
ObjectWriters.fieldWriterList("images", Image.class, (MediaContent e) -> e.getImages())
|
||||
));
|
||||
|
||||
JSON.register(MediaContent.class, ObjectReaders.of(
|
||||
MediaContent::new,
|
||||
fieldReader("media", Media.class, (MediaContent o, Media v) -> o.setMedia(v)),
|
||||
fieldReaderList("images", Image.class, ArrayList::new, (MediaContent o, List<Image> v) -> o.setImages(v))
|
||||
));
|
||||
|
||||
JSON.register(Media.class, ObjectWriters.objectWriter(
|
||||
Media.class,
|
||||
ObjectWriters.fieldWriter("bitrate", (Media e) -> e.getBitrate()),
|
||||
ObjectWriters.fieldWriter("duration", (Media e) -> e.getDuration()),
|
||||
ObjectWriters.fieldWriter("format", (Media e) -> e.getFormat()),
|
||||
ObjectWriters.fieldWriter("height", (Media e) -> e.getHeight()),
|
||||
ObjectWriters.fieldWriterList("persons", String.class, (Media e) -> e.getPersons()),
|
||||
ObjectWriters.fieldWriter("player", Player.class, (Media e) -> e.getPlayer()),
|
||||
ObjectWriters.fieldWriter("size", (Media e) -> e.getSize()),
|
||||
ObjectWriters.fieldWriter("title", (Media e) -> e.getTitle()),
|
||||
ObjectWriters.fieldWriter("uri", (Media e) -> e.getUri()),
|
||||
ObjectWriters.fieldWriter("width", (Media e) -> e.getWidth()),
|
||||
ObjectWriters.fieldWriter("copyright", (Media e) -> e.getCopyright())
|
||||
));
|
||||
|
||||
JSON.register(Media.class, ObjectReaders.of(
|
||||
Media::new,
|
||||
fieldReaderInt("bitrate", Media::setBitrate),
|
||||
fieldReaderLong("duration", Media::setDuration),
|
||||
fieldReaderString("format", Media::setFormat),
|
||||
fieldReaderInt("height", Media::setHeight),
|
||||
fieldReaderList("persons", String.class, ArrayList::new, (Media o, List<String> v) -> o.setPersons(v)),
|
||||
fieldReader("player", Player.class, (Media o, Player v) -> o.setPlayer(v)),
|
||||
fieldReaderLong("size", Media::setSize),
|
||||
fieldReaderString("title", Media::setTitle),
|
||||
fieldReaderString("uri", Media::setUri),
|
||||
fieldReaderInt("width", Media::setWidth),
|
||||
fieldReaderString("copyright", Media::setCopyright)
|
||||
));
|
||||
|
||||
JSON.register(Image.class, ObjectWriters.objectWriter(
|
||||
Image.class,
|
||||
ObjectWriters.fieldWriter("height", Image::getHeight),
|
||||
ObjectWriters.fieldWriter("size", Size.class, (Image e) -> e.getSize()),
|
||||
ObjectWriters.fieldWriter("title", Image::getTitle),
|
||||
ObjectWriters.fieldWriter("uri", Image::getUri),
|
||||
ObjectWriters.fieldWriter("width", Image::getWidth)
|
||||
));
|
||||
|
||||
JSON.register(Image.class, ObjectReaders.of(
|
||||
Image::new,
|
||||
fieldReaderInt("height", Image::setHeight),
|
||||
fieldReader("size", Size.class, (Image o, Size v) -> o.setSize(v)),
|
||||
fieldReader("title", String.class, (Image o, String v) -> o.setTitle(v)),
|
||||
fieldReader("uri", String.class, (Image o, String v) -> o.setUri(v)),
|
||||
fieldReaderInt("width", Image::setWidth)
|
||||
));
|
||||
}
|
||||
|
||||
public static class MediaContent
|
||||
implements java.io.Serializable {
|
||||
public Media media;
|
||||
public List<Image> images;
|
||||
|
||||
public MediaContent() {
|
||||
}
|
||||
|
||||
public void setMedia(Media media) {
|
||||
this.media = media;
|
||||
}
|
||||
|
||||
public void setImages(List<Image> images) {
|
||||
this.images = images;
|
||||
}
|
||||
|
||||
public Media getMedia() {
|
||||
return media;
|
||||
}
|
||||
|
||||
public List<Image> getImages() {
|
||||
return images;
|
||||
}
|
||||
}
|
||||
|
||||
public enum Size {
|
||||
SMALL, LARGE
|
||||
}
|
||||
|
||||
public static class Image
|
||||
implements java.io.Serializable {
|
||||
private int height;
|
||||
private Size size;
|
||||
private String title;
|
||||
private String uri;
|
||||
private int width;
|
||||
|
||||
public Image() {
|
||||
}
|
||||
|
||||
public void setUri(String uri) {
|
||||
this.uri = uri;
|
||||
}
|
||||
|
||||
public void setTitle(String title) {
|
||||
this.title = title;
|
||||
}
|
||||
|
||||
public void setWidth(int width) {
|
||||
this.width = width;
|
||||
}
|
||||
|
||||
public void setHeight(int height) {
|
||||
this.height = height;
|
||||
}
|
||||
|
||||
public void setSize(Size size) {
|
||||
this.size = size;
|
||||
}
|
||||
|
||||
public String getUri() {
|
||||
return uri;
|
||||
}
|
||||
|
||||
public String getTitle() {
|
||||
return title;
|
||||
}
|
||||
|
||||
public int getWidth() {
|
||||
return width;
|
||||
}
|
||||
|
||||
public int getHeight() {
|
||||
return height;
|
||||
}
|
||||
|
||||
public Size getSize() {
|
||||
return size;
|
||||
}
|
||||
}
|
||||
|
||||
public enum Player {
|
||||
JAVA, FLASH
|
||||
}
|
||||
|
||||
public static class Media
|
||||
implements java.io.Serializable {
|
||||
private int bitrate; // Can be unset.
|
||||
private long duration;
|
||||
private String format;
|
||||
private int height;
|
||||
private List<String> persons;
|
||||
private Player player;
|
||||
private long size;
|
||||
private String title;
|
||||
private String uri;
|
||||
private int width;
|
||||
private String copyright;
|
||||
|
||||
public Media() {
|
||||
}
|
||||
|
||||
public String getUri() {
|
||||
return uri;
|
||||
}
|
||||
|
||||
public void setUri(String uri) {
|
||||
this.uri = uri;
|
||||
}
|
||||
|
||||
public String getTitle() {
|
||||
return title;
|
||||
}
|
||||
|
||||
public void setTitle(String title) {
|
||||
this.title = title;
|
||||
}
|
||||
|
||||
public int getWidth() {
|
||||
return width;
|
||||
}
|
||||
|
||||
public void setWidth(int width) {
|
||||
this.width = width;
|
||||
}
|
||||
|
||||
public int getHeight() {
|
||||
return height;
|
||||
}
|
||||
|
||||
public void setHeight(int height) {
|
||||
this.height = height;
|
||||
}
|
||||
|
||||
public String getFormat() {
|
||||
return format;
|
||||
}
|
||||
|
||||
public void setFormat(String format) {
|
||||
this.format = format;
|
||||
}
|
||||
|
||||
public long getDuration() {
|
||||
return duration;
|
||||
}
|
||||
|
||||
public void setDuration(long duration) {
|
||||
this.duration = duration;
|
||||
}
|
||||
|
||||
public long getSize() {
|
||||
return size;
|
||||
}
|
||||
|
||||
public void setSize(long size) {
|
||||
this.size = size;
|
||||
}
|
||||
|
||||
public int getBitrate() {
|
||||
return bitrate;
|
||||
}
|
||||
|
||||
public void setBitrate(int bitrate) {
|
||||
this.bitrate = bitrate;
|
||||
}
|
||||
|
||||
public List<String> getPersons() {
|
||||
return persons;
|
||||
}
|
||||
|
||||
public void setPersons(List<String> persons) {
|
||||
this.persons = persons;
|
||||
}
|
||||
|
||||
public Player getPlayer() {
|
||||
return player;
|
||||
}
|
||||
|
||||
public void setPlayer(Player player) {
|
||||
this.player = player;
|
||||
}
|
||||
|
||||
public String getCopyright() {
|
||||
return copyright;
|
||||
}
|
||||
|
||||
public void setCopyright(String copyright) {
|
||||
this.copyright = copyright;
|
||||
}
|
||||
}
|
||||
}
|
@ -1,56 +0,0 @@
|
||||
package com.alibaba.fastjson2.example.graalvm_native;
|
||||
|
||||
import com.alibaba.fastjson2.JSON;
|
||||
import com.alibaba.fastjson2.JSONReader;
|
||||
import org.junit.jupiter.api.Test;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
public class Hello {
|
||||
@Test
|
||||
public void test() throws Exception {
|
||||
String jmvName = System.getProperty("java.vm.name");
|
||||
System.out.println("java.vm.name : " + jmvName);
|
||||
|
||||
User user = new User(1, "雷卷");
|
||||
List list = new ArrayList();
|
||||
list.add(user);
|
||||
String jsonText = JSON.toJSONString(list);
|
||||
List<User> user2 = JSON.parseArray(jsonText, User.class);
|
||||
System.out.println(jsonText);
|
||||
System.out.println("Fastjson: " + user2.get(0).getNick());
|
||||
|
||||
System.out.println(JSONReader.of("{}").getClass().getName());
|
||||
System.out.println(JSONReader.of("{}").getObjectReader(User.class).getClass());
|
||||
}
|
||||
|
||||
public static class User {
|
||||
private Integer id;
|
||||
private String nick;
|
||||
|
||||
public User() {
|
||||
}
|
||||
|
||||
public User(Integer id, String nick) {
|
||||
this.id = id;
|
||||
this.nick = nick;
|
||||
}
|
||||
|
||||
public Integer getId() {
|
||||
return id;
|
||||
}
|
||||
|
||||
public void setId(Integer id) {
|
||||
this.id = id;
|
||||
}
|
||||
|
||||
public String getNick() {
|
||||
return nick;
|
||||
}
|
||||
|
||||
public void setNick(String nick) {
|
||||
this.nick = nick;
|
||||
}
|
||||
}
|
||||
}
|
Loading…
x
Reference in New Issue
Block a user