Skip to content

Commit 0bff191

Browse files
mellowaregastaldi
andauthored
Initial code cleanup, Quarkus 3.15 LTS, fixed versions, Dev UI (#57)
* Initial code cleanup, Quarkus 3.15 LTS, fixed versions, Dev UI * Update deployment/src/main/java/io/quarkiverse/jasperreports/deployment/devui/JasperReportsDevUIProcessor.java Co-authored-by: George Gastaldi <[email protected]> --------- Co-authored-by: George Gastaldi <[email protected]>
1 parent 01d2fe5 commit 0bff191

File tree

18 files changed

+691
-323
lines changed

18 files changed

+691
-323
lines changed

.github/dependabot.yml

Lines changed: 23 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,4 +10,26 @@ updates:
1010
schedule:
1111
interval: "daily"
1212
ignore:
13-
- dependency-name: "org.apache.maven.plugins:maven-compiler-plugin"
13+
- dependency-name: "io.quarkus:quarkus-bom"
14+
- dependency-name: "io.quarkus:quarkus-maven-plugin"
15+
- dependency-name: "io.quarkus:quarkus-extension-processor"
16+
- dependency-name: "io.quarkus:quarkus-extension-maven-plugin"
17+
groups:
18+
quarkus:
19+
patterns:
20+
- "io.quarkus*"
21+
- "quarkus*"
22+
quarkiverse:
23+
patterns:
24+
- "io.quarkiverse*"
25+
dependencies:
26+
patterns:
27+
- "*"
28+
exclude-patterns:
29+
- "io.quarkus*"
30+
- "quarkus*"
31+
- "io.quarkiverse*"
32+
- package-ecosystem: "github-actions"
33+
directory: "/"
34+
schedule:
35+
interval: "daily"

.github/workflows/build.yml

Lines changed: 7 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -36,25 +36,24 @@ jobs:
3636
strategy:
3737
fail-fast: false
3838
matrix:
39-
# os: [windows-latest, macos-latest, ubuntu-latest]
40-
os: [ubuntu-latest]
39+
# os: [windows-latest, macos-latest, ubuntu-latest]
40+
os: [windows-latest, ubuntu-latest]
4141
runs-on: ${{ matrix.os }}
4242
steps:
4343
- name: Prepare git
4444
run: git config --global core.autocrlf false
4545
if: startsWith(matrix.os, 'windows')
4646

47-
- uses: actions/checkout@v3
47+
- uses: actions/checkout@v4
4848
- name: Set up JDK 17
49-
uses: actions/setup-java@v3
49+
uses: actions/setup-java@v4
5050
with:
5151
distribution: temurin
5252
java-version: 17
5353
cache: 'maven'
5454

5555
- name: Build with Maven
56-
run: mvn -B clean verify -Dno-format
56+
run: mvn -B clean install -Dno-format
5757

58-
# Native won't work anyway
59-
# - name: Build with Maven (Native)
60-
# run: mvn -B verify -Dnative -Dquarkus.native.container-build -Dnative.surefire.skip -Dno-format
58+
#- name: Build with Maven (Native)
59+
#run: mvn -B install -Dnative -Dquarkus.native.container-build -Dnative.surefire.skip

.github/workflows/quarkus-snapshot.yaml

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -35,21 +35,21 @@ jobs:
3535

3636
steps:
3737
- name: Install yq
38-
uses: dcarbone/install-yq-action@v1.0.1
38+
uses: dcarbone/install-yq-action@v1.1.1
3939

4040
- name: Set up Java
41-
uses: actions/setup-java@v3
41+
uses: actions/setup-java@v4
4242
with:
4343
distribution: temurin
4444
java-version: ${{ env.JAVA_VERSION }}
4545

4646
- name: Checkout repo
47-
uses: actions/checkout@v3
47+
uses: actions/checkout@v4
4848
with:
4949
path: current-repo
5050

5151
- name: Checkout Ecosystem
52-
uses: actions/checkout@v3
52+
uses: actions/checkout@v4
5353
with:
5454
repository: ${{ env.ECOSYSTEM_CI_REPO }}
5555
path: ecosystem-ci

README.md

Lines changed: 66 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,25 +1,79 @@
1-
# Quarkus Jasperreports
1+
<div align="center">
2+
<img src="https://github.com/quarkiverse/quarkus-jasperreports/blob/main/docs/modules/ROOT/assets/images/quarkus.svg" width="67" height="70" ><img src="https://github.com/quarkiverse/quarkus-jasperreports/blob/main/docs/modules/ROOT/assets/images/plus-sign.svg" height="70" ><img src="https://github.com/quarkiverse/quarkus-jasperreports/blob/main/docs/modules/ROOT/assets/images/jasperreports.svg" height="70" >
3+
4+
# Quarkus JasperReports
5+
</div>
6+
<br>
27

38
[![Version](https://img.shields.io/maven-central/v/io.quarkiverse.jasperreports/quarkus-jasperreports?logo=apache-maven&style=flat-square)](https://search.maven.org/artifact/io.quarkiverse.jasperreports/quarkus-jasperreports)
9+
[![License](https://img.shields.io/badge/License-Apache%202.0-blue.svg?style=flat-square)](https://opensource.org/licenses/Apache-2.0)
10+
[![Build](https://github.com/quarkiverse/quarkus-jasperreports/actions/workflows/build.yml/badge.svg)](https://github.com/quarkiverse/quarkus-jasperreports/actions/workflows/build.yml)
11+
12+
A Quarkus extension that lets you utilize [JasperReports](https://community.jaspersoft.com/download-jaspersoft/community-edition/). JasperReports is an open source Java reporting tool that can write to a variety of targets, such as: screen, a printer, into PDF, HTML, Microsoft Excel, RTF, ODT, comma-separated values (CSV), XSL, or XML files.
13+
14+
## Getting started
15+
16+
Read the full [JasperReports documentation](https://docs.quarkiverse.io/quarkus-jasperreports/dev/index.html).
17+
18+
### Installation
19+
20+
Create a new JasperReports project (with a base jasperreports starter code):
21+
22+
- With [code.quarkus.io](https://code.quarkus.io/?a=jasperreports-bowl&j=17&e=io.quarkiverse.jasperreports%3Aquarkus-jasperreports)
23+
- With the [Quarkus CLI](https://quarkus.io/guides/cli-tooling):
24+
25+
```bash
26+
quarkus create app jasperreports-app -x=io.quarkiverse.jasperreports:quarkus-jasperreports
27+
```
28+
Or add to you pom.xml directly:
29+
30+
```xml
31+
<dependency>
32+
<groupId>io.quarkiverse.jasperreports</groupId>
33+
<artifactId>quarkus-jasperreports</artifactId>
34+
<version>{project-version}</version>
35+
</dependency>
36+
```
437

5-
## Welcome to Quarkiverse!
38+
## Docker
639

7-
Congratulations and thank you for creating a new Quarkus extension project in Quarkiverse!
40+
When building native images in Docker using the standard Quarkus Docker configuration files some additional features need to be installed to support fonts. Specifically font information is not included in [Red Hat's ubi-minimal images](https://developers.redhat.com/products/rhel/ubi). To install it
41+
simply add these lines to your `DockerFile.native` file:
842

9-
Feel free to replace this content with the proper description of your new project and necessary instructions how to use and contribute to it.
43+
```shell
44+
FROM registry.access.redhat.com/ubi8/ubi-minimal:8.9
1045

11-
You can find the basic info, Quarkiverse policies and conventions in [the Quarkiverse wiki](https://github.com/quarkiverse/quarkiverse/wiki).
46+
######################### Set up environment for POI #############################
47+
RUN microdnf update && microdnf install freetype fontconfig && microdnf clean all
48+
######################### Set up environment for POI #############################
1249

13-
In case you are creating a Quarkus extension project for the first time, please follow [Building My First Extension](https://quarkus.io/guides/building-my-first-extension) guide.
50+
WORKDIR /work/
51+
RUN chown 1001 /work \
52+
&& chmod "g+rwX" /work \
53+
&& chown 1001:root /work
54+
# Shared objects to be dynamically loaded at runtime as needed,
55+
COPY --chown=1001:root target/*.properties target/*.so /work/
56+
COPY --chown=1001:root target/*-runner /work/application
57+
# Permissions fix for Windows
58+
RUN chmod "ugo+x" /work/application
59+
EXPOSE 8080
60+
USER 1001
1461

15-
Other useful articles related to Quarkus extension development can be found under the [Writing Extensions](https://quarkus.io/guides/#writing-extensions) guide category on the [Quarkus.io](https://quarkus.io) website.
62+
CMD ["./application", "-Dquarkus.http.host=0.0.0.0"]
63+
```
1664

17-
Thanks again, good luck and have fun!
65+
> [!CAUTION]
66+
> Make sure `.dockerignore` does not exclude `.so` files!
1867
19-
## Documentation
68+
## 🧑‍💻 Contributing
2069

21-
The documentation for this extension should be maintained as part of this repository and it is stored in the `docs/` directory.
70+
- Contribution is the best way to support and get involved in community!
71+
- Please, consult our [Code of Conduct](./CODE_OF_CONDUCT.md) policies for interacting in our community.
72+
- Contributions to `quarkus-jasperreports` Please check our [CONTRIBUTING.md](./CONTRIBUTING.md)
2273

23-
The layout should follow the [Antora's Standard File and Directory Set](https://docs.antora.org/antora/2.3/standard-directories/).
74+
### If you have any idea or question 🤷
2475

25-
Once the docs are ready to be published, please open a PR including this repository in the [Quarkiverse Docs Antora playbook](https://github.com/quarkiverse/quarkiverse-docs/blob/main/antora-playbook.yml#L7). See an example [here](https://github.com/quarkiverse/quarkiverse-docs/pull/1).
76+
- [Ask a question](https://github.com/quarkiverse/quarkus-jasperreports/discussions)
77+
- [Raise an issue](https://github.com/quarkiverse/quarkus-jasperreports/issues)
78+
- [Feature request](https://github.com/quarkiverse/quarkus-jasperreports/issues)
79+
- [Code submission](https://github.com/quarkiverse/quarkus-jasperreports/pulls)

deployment/pom.xml

Lines changed: 52 additions & 46 deletions
Original file line numberDiff line numberDiff line change
@@ -1,48 +1,54 @@
11
<?xml version="1.0" encoding="UTF-8"?>
2-
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
3-
<modelVersion>4.0.0</modelVersion>
4-
<parent>
5-
<groupId>io.quarkiverse.jasperreports</groupId>
6-
<artifactId>quarkus-jasperreports-parent</artifactId>
7-
<version>lütter-SNAPSHOT</version>
8-
</parent>
9-
<artifactId>quarkus-jasperreports-deployment</artifactId>
10-
<name>Quarkus Jasperreports - Deployment</name>
11-
<build>
12-
<plugins>
13-
<plugin>
14-
<artifactId>maven-compiler-plugin</artifactId>
15-
<configuration>
16-
<annotationProcessorPaths>
17-
<path>
18-
<groupId>io.quarkus</groupId>
19-
<artifactId>quarkus-extension-processor</artifactId>
20-
<version>${version.quarkus}</version>
21-
</path>
22-
</annotationProcessorPaths>
23-
</configuration>
24-
</plugin>
25-
</plugins>
26-
</build>
2+
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
3+
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
4+
<modelVersion>4.0.0</modelVersion>
5+
<parent>
6+
<groupId>io.quarkiverse.jasperreports</groupId>
7+
<artifactId>quarkus-jasperreports-parent</artifactId>
8+
<version>999-SNAPSHOT</version>
9+
</parent>
10+
<artifactId>quarkus-jasperreports-deployment</artifactId>
11+
<name>Quarkus JasperReports - Deployment</name>
12+
<dependencies>
13+
<dependency>
14+
<groupId>io.quarkus</groupId>
15+
<artifactId>quarkus-arc-deployment</artifactId>
16+
</dependency>
17+
<dependency>
18+
<groupId>io.quarkus</groupId>
19+
<artifactId>quarkus-jackson-deployment</artifactId>
20+
</dependency>
21+
<dependency>
22+
<groupId>io.quarkus</groupId>
23+
<artifactId>quarkus-vertx-http-dev-ui-spi</artifactId>
24+
</dependency>
25+
<dependency>
26+
<groupId>io.quarkiverse.jasperreports</groupId>
27+
<artifactId>quarkus-jasperreports</artifactId>
28+
<version>${project.version}</version>
29+
</dependency>
30+
<dependency>
31+
<groupId>io.quarkus</groupId>
32+
<artifactId>quarkus-junit5-internal</artifactId>
33+
<scope>test</scope>
34+
</dependency>
35+
</dependencies>
2736

28-
<dependencies>
29-
<dependency>
30-
<groupId>io.quarkus</groupId>
31-
<artifactId>quarkus-arc-deployment</artifactId>
32-
</dependency>
33-
<dependency>
34-
<groupId>io.quarkus</groupId>
35-
<artifactId>quarkus-jackson-deployment</artifactId>
36-
</dependency>
37-
<dependency>
38-
<groupId>io.quarkiverse.jasperreports</groupId>
39-
<artifactId>quarkus-jasperreports</artifactId>
40-
<version>${project.version}</version>
41-
</dependency>
42-
<dependency>
43-
<groupId>io.quarkus</groupId>
44-
<artifactId>quarkus-junit5-internal</artifactId>
45-
<scope>test</scope>
46-
</dependency>
47-
</dependencies>
48-
</project>
37+
<build>
38+
<plugins>
39+
<plugin>
40+
<groupId>org.apache.maven.plugins</groupId>
41+
<artifactId>maven-compiler-plugin</artifactId>
42+
<configuration>
43+
<annotationProcessorPaths>
44+
<path>
45+
<groupId>io.quarkus</groupId>
46+
<artifactId>quarkus-extension-processor</artifactId>
47+
<version>${version.quarkus}</version>
48+
</path>
49+
</annotationProcessorPaths>
50+
</configuration>
51+
</plugin>
52+
</plugins>
53+
</build>
54+
</project>

deployment/src/main/java/io/quarkiverse/jasperreports/deployment/JasperreportsProcessor.java

Lines changed: 26 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,22 +3,47 @@
33
import io.quarkus.deployment.annotations.BuildProducer;
44
import io.quarkus.deployment.annotations.BuildStep;
55
import io.quarkus.deployment.builditem.FeatureBuildItem;
6+
import io.quarkus.deployment.builditem.nativeimage.NativeImageResourceBuildItem;
7+
import io.quarkus.deployment.builditem.nativeimage.NativeImageResourceBundleBuildItem;
68
import io.quarkus.deployment.builditem.nativeimage.RuntimeInitializedClassBuildItem;
9+
import io.quarkus.deployment.pkg.builditem.UberJarMergedResourceBuildItem;
710

811
class JasperreportsProcessor {
912

1013
private static final String FEATURE = "jasperreports";
14+
private static final String EXTENSIONS_FILE = "jasperreports_extension.properties";
1115

1216
@BuildStep
1317
FeatureBuildItem feature() {
1418
return new FeatureBuildItem(FEATURE);
1519
}
1620

21+
@BuildStep
22+
UberJarMergedResourceBuildItem mergeResource() {
23+
return new UberJarMergedResourceBuildItem(EXTENSIONS_FILE);
24+
}
25+
1726
@BuildStep
1827
void runtimeInits(BuildProducer<RuntimeInitializedClassBuildItem> producer) {
1928
// TODO: Test what is really needed for native to work
2029
// see also https://github.com/quarkusio/quarkus/issues/31224
2130
producer.produce(new RuntimeInitializedClassBuildItem("net.sf.jasperreports.engine.SimpleReportContext"));
2231
producer.produce(new RuntimeInitializedClassBuildItem("net.sf.jasperreports.engine.design.JRAbstractCompiler"));
2332
}
24-
}
33+
34+
@BuildStep
35+
void substrateResourceBuildItems(BuildProducer<NativeImageResourceBuildItem> nativeImageResourceProducer,
36+
BuildProducer<NativeImageResourceBundleBuildItem> resourceBundleBuildItem) {
37+
nativeImageResourceProducer.produce(new NativeImageResourceBuildItem(
38+
EXTENSIONS_FILE,
39+
"default.jasperreports.properties",
40+
"jasperreports_messages.properties",
41+
"metadata_messages.properties",
42+
"metadata_messages-defaults.properties",
43+
"properties-metadata.json"));
44+
45+
resourceBundleBuildItem.produce(new NativeImageResourceBundleBuildItem("jasperreports_messages"));
46+
resourceBundleBuildItem.produce(new NativeImageResourceBundleBuildItem("metadata_messages"));
47+
resourceBundleBuildItem.produce(new NativeImageResourceBundleBuildItem("metadata_messages-defaults"));
48+
}
49+
}
Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
package io.quarkiverse.jasperreports.deployment.devui;
2+
3+
import io.quarkus.deployment.IsDevelopment;
4+
import io.quarkus.deployment.annotations.BuildProducer;
5+
import io.quarkus.deployment.annotations.BuildStep;
6+
import io.quarkus.devui.spi.page.CardPageBuildItem;
7+
import io.quarkus.devui.spi.page.ExternalPageBuilder;
8+
import io.quarkus.devui.spi.page.Page;
9+
import net.sf.jasperreports.engine.JasperReport;
10+
11+
public class JasperReportsDevUIProcessor {
12+
13+
@BuildStep(onlyIf = IsDevelopment.class)
14+
void createVersion(BuildProducer<CardPageBuildItem> cardPageBuildItemBuildProducer) {
15+
final CardPageBuildItem card = new CardPageBuildItem();
16+
17+
final ExternalPageBuilder versionPage = Page.externalPageBuilder("JasperReports Version")
18+
.icon("font-awesome-regular:tag")
19+
.url("https://community.jaspersoft.com/download-jaspersoft/community-edition/")
20+
.doNotEmbed()
21+
.staticLabel(JasperReport.class.getPackage().getSpecificationVersion());
22+
23+
card.addPage(versionPage);
24+
25+
card.setCustomCard("qwc-jasperreports-card.js");
26+
27+
cardPageBuildItemBuildProducer.produce(card);
28+
}
29+
}

0 commit comments

Comments
 (0)