Skip to content

Commit 56e51fb

Browse files
authored
Merge pull request #308 from graalvm/ni-demos-refactoring-5
[GR-60094] Add a demo for Include Resources in a Native Executable guide.
2 parents 9519b75 + f837a5e commit 56e51fb

File tree

7 files changed

+1048
-0
lines changed

7 files changed

+1048
-0
lines changed
Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
name: native-image/include-resources
2+
on:
3+
push:
4+
paths:
5+
- 'native-image/include-resources/**'
6+
- '.github/workflows/native-image-include-resources.yml'
7+
pull_request:
8+
paths:
9+
- 'native-image/include-resources/**'
10+
- '.github/workflows/native-image-include-resources.yml'
11+
schedule:
12+
- cron: "0 0 1 * *" # run every month
13+
workflow_dispatch:
14+
permissions:
15+
contents: read
16+
jobs:
17+
run:
18+
name: Run 'native-image/include-resources'
19+
runs-on: ubuntu-latest
20+
timeout-minutes: 15
21+
strategy:
22+
matrix:
23+
java-version: ['21', '24-ea']
24+
steps:
25+
- uses: actions/checkout@v4
26+
- uses: graalvm/setup-graalvm@v1
27+
with:
28+
java-version: ${{ matrix.java-version }}
29+
distribution: 'graalvm'
30+
github-token: ${{ secrets.GITHUB_TOKEN }}
31+
cache: 'maven'
32+
native-image-job-reports: 'true'
33+
- name: Run 'native-image/include-resources'
34+
run: |
35+
cd native-image/include-resources
36+
javac Fortune.java
37+
native-image -Ob -H:IncludeResources=".*u8$" Fortune
38+
./fortune
Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
.class
2+
fortune
Lines changed: 76 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,76 @@
1+
/*
2+
* Copyright (c) 2024, Oracle and/or its affiliates. All rights reserved.
3+
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4+
*
5+
* The Universal Permissive License (UPL), Version 1.0
6+
*
7+
* Subject to the condition set forth below, permission is hereby granted to any
8+
* person obtaining a copy of this software, associated documentation and/or
9+
* data (collectively the "Software"), free of charge and under any and all
10+
* copyright rights in the Software, and any and all patent rights owned or
11+
* freely licensable by each licensor hereunder covering either (i) the
12+
* unmodified Software as contributed to or provided by such licensor, or (ii)
13+
* the Larger Works (as defined below), to deal in both
14+
*
15+
* (a) the Software, and
16+
*
17+
* (b) any piece of software and/or hardware listed in the lrgrwrks.txt file if
18+
* one is included with the Software each a "Larger Work" to which the Software
19+
* is contributed by such licensors),
20+
*
21+
* without restriction, including without limitation the rights to copy, create
22+
* derivative works of, display, perform, and distribute the Software and make,
23+
* use, sell, offer for sale, import, export, have made, and have sold the
24+
* Software and the Larger Work(s), and to sublicense the foregoing rights on
25+
* either these or other terms.
26+
*
27+
* This license is subject to the following condition:
28+
*
29+
* The above copyright notice and either this complete permission notice or at a
30+
* minimum a reference to the UPL must be included in all copies or substantial
31+
* portions of the Software.
32+
*
33+
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
34+
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
35+
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
36+
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
37+
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
38+
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
39+
* SOFTWARE.
40+
*/
41+
42+
import java.io.BufferedReader;
43+
import java.io.InputStreamReader;
44+
import java.util.ArrayList;
45+
import java.util.Random;
46+
import java.util.Scanner;
47+
48+
public class Fortune {
49+
50+
private static final String SEPARATOR = "%";
51+
private static final Random RANDOM = new Random();
52+
private ArrayList<String> fortunes = new ArrayList<>();
53+
54+
public Fortune(String path) {
55+
// Scan the file into the array of fortunes
56+
Scanner s = new Scanner(new BufferedReader(new InputStreamReader(this.getClass().getResourceAsStream(path))));
57+
s.useDelimiter(SEPARATOR);
58+
while (s.hasNext()) {
59+
fortunes.add(s.next());
60+
}
61+
}
62+
63+
private void printRandomFortune() throws InterruptedException {
64+
int r = RANDOM.nextInt(fortunes.size()); // Pick a random number
65+
String f = fortunes.get(r); // Use the random number to pick a random fortune
66+
for (char c: f.toCharArray()) { // Print out the fortune
67+
System.out.print(c);
68+
Thread.sleep(100);
69+
}
70+
}
71+
72+
public static void main(String[] args) throws InterruptedException {
73+
Fortune fortune = new Fortune("/fortunes.u8");
74+
fortune.printRandomFortune();
75+
}
76+
}
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
{
2+
"resources": [
3+
{
4+
"glob": "fortunes.u8"
5+
}
6+
]
7+
}
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
# Include Resources in a Native Executable
2+
3+
You can find the steps to run this demo on [the website](https://www.graalvm.org/latest/reference-manual/native-image/guides/include-resources/).

0 commit comments

Comments
 (0)