Ikonli in Fat-Jar mit mehreren Icon-Packs einbinden

godi

Aktives Mitglied
Hallo,
ich habe eine JavaFX Application welche zwei Icon-Packs von Ikonli einbindet.
In IntelliJ lässt sich die Application ausführen, jedoch wenn ich mir mit IntelliJ eine Fat-Jar erstellen lasse und ausführe, dann gibt es eine Exception.
Caused by: java.lang.UnsupportedOperationException: Cannot resolve 'fab-accessible-icon'
at org.kordamp.ikonli.AbstractIkonResolver.resolve(AbstractIkonResolver.java:61)
at org.kordamp.ikonli.javafx.IkonResolver.resolve(IkonResolver.java:73)
at org.kordamp.ikonli.javafx.FontIcon.setIconLiteral(FontIcon.java:251)
... 33 more
Wenn ich nur ein Icon-Pack von Ikonli einbinde dann funktioniert die Fat-Jar auch. Also nehmen ich mal an, dass es am zweiten Icon-Pack liegt. Wenn ich in die Jar reinschaue dann sind auch beide Icon-Packs vorhanden.

An die Anleitung habe ich mich gehalten.
Mein Maven pom.xml sieht folgend aus:


XML:
<?xml version="1.0" encoding="UTF-8"?>
<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">
    <modelVersion>4.0.0</modelVersion>

    <groupId>at.godi</groupId>
    <artifactId>TestIkonli</artifactId>
    <version>1.0-SNAPSHOT</version>
    <name>TestIkonli</name>

    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    </properties>

    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.kordamp.ikonli</groupId>
                <artifactId>ikonli-bom</artifactId>
                <version>12.3.1</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>org.kordamp.ikonli</groupId>
            <artifactId>ikonli-javafx</artifactId>
        </dependency>
        <dependency>
            <groupId>org.kordamp.ikonli</groupId>
            <artifactId>ikonli-materialdesign2-pack</artifactId>
        </dependency>
        <dependency>
            <groupId>org.kordamp.ikonli</groupId>
            <artifactId>ikonli-fontawesome5-pack</artifactId>
        </dependency>

        <dependency>
            <groupId>org.openjfx</groupId>
            <artifactId>javafx-controls</artifactId>
            <version>17.0.1</version>
        </dependency>
        <dependency>
            <groupId>org.openjfx</groupId>
            <artifactId>javafx-fxml</artifactId>
            <version>17.0.1</version>
        </dependency>


    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-shade-plugin</artifactId>
                <version>3.2.4</version>
                <configuration>
                    <transformers>
                        <transformer implementation="org.apache.maven.plugins.shade.resource.ServicesResourceTransformer"/>
                    </transformers>
                </configuration>
                <executions>
                    <execution>
                        <phase>package</phase>
                        <goals>
                            <goal>shade</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.10.1</version>
                <configuration>
                    <source>17</source>
                    <target>17</target>
                </configuration>
            </plugin>
            <plugin>
                <groupId>org.openjfx</groupId>
                <artifactId>javafx-maven-plugin</artifactId>
                <version>0.0.8</version>
                <executions>
                    <execution>
                        <!-- Default configuration for running with: mvn clean javafx:run -->
                        <id>default-cli</id>
                        <configuration>
                            <mainClass>at.godi.testikonli/at.godi.testikonli.RunHelloApplication</mainClass>
                            <launcher>app</launcher>
                            <jlinkZipName>app</jlinkZipName>
                            <jlinkImageName>app</jlinkImageName>
                            <noManPages>true</noManPages>
                            <stripDebug>true</stripDebug>
                            <noHeaderFiles>true</noHeaderFiles>
                        </configuration>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>
</project>

Im Anhang befindet sich ein Testprojekt welches mit IntelliJ erstellt wurde.

Hat jemand eine Idee an was es scheitern könnte?

godi
 

Anhänge

  • TestIkonli.zip
    74,6 KB · Aufrufe: 0

KonradN

Super-Moderator
Mitarbeiter
Also dein Testprojekt habe ich mal ausprobiert und ich bekomme da keinen Fehler. Bei mir läuft das ohne irgend einen Fehler auf meinem Windows 10 Rechner mit Java 17 (Temurin OpenJDK).

Wie baust du das Projekt? Probiere mal auf der Kommandozeile den Wrapper mit mvnw clean package.

Was ich gemacht habe:
  • ZIP Entpackt
  • In dem Verzeichnis ein mvnw clean package

Dann der Aufruf:
Code:
C:\Projects\temp\TestIkonli>java -cp target\TestIkonli-1.0-SNAPSHOT.jar at.godi.testikonli.RunHelloApplication
Aug. 30, 2022 8:57:50 AM com.sun.javafx.application.PlatformImpl startup
WARNUNG: Unsupported JavaFX configuration: classes were loaded from 'unnamed module @574f137b'
Aug. 30, 2022 8:57:51 AM javafx.fxml.FXMLLoader$ValueElement processValue
WARNUNG: Loading FXML document with JavaFX API of version 18 by JavaFX runtime of version 17.0.1

C:\Projects\temp\TestIkonli>java -version
openjdk version "17.0.3" 2022-04-19
OpenJDK Runtime Environment Temurin-17.0.3+7 (build 17.0.3+7)
OpenJDK 64-Bit Server VM Temurin-17.0.3+7 (build 17.0.3+7, mixed mode, sharing)

C:\Projects\temp\TestIkonli>

1661842943469.png
 

godi

Aktives Mitglied
Hallo,

Danke, habe es jetzt gemacht wie du gesagt hast und da funktioniert es wirklich.

Wusste nicht, dass mir "mvnw clean package" auch eine fat/uber jar erstellt.
Die jar habe ich mit IntelliJ Artifacts erstellt.

Aber gut, dass ich jetzt weiß wie die jar mit maven erstellt werden kann. Habe ich vor ein paar Wochen schon mal versucht und da nicht geschafft. Deshalb habe ich den temporären Weg über IntelliJ gemacht.
 

KonradN

Super-Moderator
Mitarbeiter
Hallo,

Danke, habe es jetzt gemacht wie du gesagt hast und da funktioniert es wirklich.

Wusste nicht, dass mir "mvnw clean package" auch eine fat/uber jar erstellt.
Die jar habe ich mit IntelliJ Artifacts erstellt.

Aber gut, dass ich jetzt weiß wie die jar mit maven erstellt werden kann. Habe ich vor ein paar Wochen schon mal versucht und da nicht geschafft. Deshalb habe ich den temporären Weg über IntelliJ gemacht.
Einfach einmal ein paar Erklärung, damit Du ein etwas besseres Bild der Problematik bekommst:

Bei dem Lifecycle in maven package wird das Ziel gebaut. Das ist dann erst einmal ein normales jar File.

Du hast aber das shade Plugin konfiguriert und hast gesagt, dass dies auch bei package laufen soll. (Dieses Execute phase package Element besagt dies). Das Shade Plugin baut dann das fat jar - und passt dabei die ganzen service Dateien an. Das original jar findest Du dann als original-....jar und das neue jar ist dann das fat jar.

Wenn Du das jar File mir IntelliJ gebaut hast, dann ist das Problem vermutlich einfach, dass die Services nicht richtig konfiguriert wurden. Das macht die Konfiguration, die da hinzu gefügt wurde mit dem ServicesResourceTransformer.

Lade einfach einmal dsa jar file von https://mvnrepository.com/artifact/org.kordamp.ikonli/ikonli-materialdesign-pack/12.3.1 herunter (oder Du findest es auch in deinem Home Verzeichnis unter .m2/repository/org/kordamp/ikonli/......... (Dann kopiere es woanders hin).

Benenne es einmal um in ein zip File, damit du hinein schauen kannst und entpacke es:
Schau dann einmal an: META-INF/services/
dort sind zwei Dateien - org.kordamp.ikonli.IkonHandler und org.kordamp.ikonli.Provider

Das sind Textdateien - die kannst Du Dir einmal ansehen. Den genauen Inhalt musst Du nicht verstehen - aber da stehen Klassen, die dazu dienen, dann die Icons zu laden / zu finden.

Die Schritte des herunter geladenen jar Files kannst Du nun wiederholen:
  • einmal mit dem fat JAR von Maven - da wirst Du dann sehen, dass diese Text Dateien sehr viel beinhalten. Halt der Inhalt aus allen Abhängigkeiten zusammen gefügt.
  • Dann das jar File von IntelliJ - da Du IntelliJ nicht gesagt hast, dass da etwas zu tun ist, wird hier entweder nichts sein oder einfach eine Datei einer Abhängigkeit (dann wurden die kopiert und mit jedem jar wurde die vorhandene überschrieben). Die Datei ist einfach zu klein.

Das einfach nur einmal als kleine Erläuterung um hier noch ein etwas tieferes Verständnis herbei zu führen.


Ach ja - in IntelliJ kannst Du das auch genau so bauen - öffne dazu einfach das Maven Toolfenster und im Lifecycle dann einfach package mit doppelclick starten (ggf. vorher erst noch das clean). Dann baut Maven - von IntelliJ aus gestartet - auch alles.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
F Zeile in mehreren Jtables bei Selektion markieren AWT, Swing, JavaFX & SWT 11
K JavaFX Resizing-Problem beim BorderLayout (Center Component) beim Arbeiten mit mehreren FXMLs AWT, Swing, JavaFX & SWT 2
P JavaFx - Progressbar - Füllen mittels mehreren Tasks AWT, Swing, JavaFX & SWT 0
O Basics - Anwendung erstellen mit mehreren Szenen AWT, Swing, JavaFX & SWT 1
N Taschenrechner mit mehreren Rechnungen AWT, Swing, JavaFX & SWT 18
M Swing MVC-Pattern - View mit mehreren Models AWT, Swing, JavaFX & SWT 5
B JavaFX PrinterJob mit mehreren Seiten AWT, Swing, JavaFX & SWT 0
T JavaFX Label mit mehreren Images AWT, Swing, JavaFX & SWT 11
R KeyListener in mehreren Panels AWT, Swing, JavaFX & SWT 5
M Ein Element in mehreren JList selektieren AWT, Swing, JavaFX & SWT 5
W Swing JPanel nur einmal nach mehreren Änderungen neu zeichnen AWT, Swing, JavaFX & SWT 1
S JComboBox mit mehreren Spalten? AWT, Swing, JavaFX & SWT 6
K Swing Keine Reaktion auf Tastatureingaben bei mehreren Buttons??? AWT, Swing, JavaFX & SWT 4
M Swing MVC mit mehreren Klassen AWT, Swing, JavaFX & SWT 2
J JavaFX eine Art Tabelle, jedoch mit mehreren Zeilen AWT, Swing, JavaFX & SWT 2
K Swing Klassenstruktur mit mehreren JPanels AWT, Swing, JavaFX & SWT 3
M Applikation mit mehreren Scenes AWT, Swing, JavaFX & SWT 5
F Swing JAVA GUI Übergabe von Werten zwischen mehreren Fenstern/Klassen AWT, Swing, JavaFX & SWT 10
A JButton - Klicks zählen auf mehreren Buttons AWT, Swing, JavaFX & SWT 2
J Mit mehreren in Objekten in JFrame printen? AWT, Swing, JavaFX & SWT 8
P Liste mit Icons und mehreren Spalten AWT, Swing, JavaFX & SWT 7
B Swing Formular mit mehreren Elementen - wie die ActionListener-Verarbeitung lösen? AWT, Swing, JavaFX & SWT 2
S Shape erstellen der aus mehreren Elementen besteht..? AWT, Swing, JavaFX & SWT 3
F Tablemodel zu mehreren Tabellen AWT, Swing, JavaFX & SWT 6
T Sichtbarmachen von Objekten auf mehreren JPanels AWT, Swing, JavaFX & SWT 2
DamienX Swing Component auf mehreren Containern AWT, Swing, JavaFX & SWT 2
B Swing JFormattedTextField auf mehreren JPanels in einer JTabbedPane AWT, Swing, JavaFX & SWT 3
M In Jlist auf Änderungen von mehreren JLabels reagieren AWT, Swing, JavaFX & SWT 3
E JTable nach mehreren Spalten sortieren AWT, Swing, JavaFX & SWT 14
B SWT SWT Tree mit mehreren Spalten AWT, Swing, JavaFX & SWT 3
W GUI in mehreren Threads AWT, Swing, JavaFX & SWT 5
J Swing JComboBox mit mehreren Spalten AWT, Swing, JavaFX & SWT 4
T Auf Ende von mehreren Threads warten, ohne den EDT zu blockieren AWT, Swing, JavaFX & SWT 1
J SWING Fenster mit mehreren JPanels (dank JLayeredPane) AWT, Swing, JavaFX & SWT 19
T Swing KeyListener mit mehreren Objekten AWT, Swing, JavaFX & SWT 2
G Verliere Referenz von Toolbar bei mehreren Fenster AWT, Swing, JavaFX & SWT 3
M MVC: Grundidee verstanden aber was machen mit mehreren Model AWT, Swing, JavaFX & SWT 2
R Daten in JTable in mehreren Zeilen darstellen AWT, Swing, JavaFX & SWT 11
G JDialog mit mehreren Elementen! AWT, Swing, JavaFX & SWT 5
G Ein Frame mit mehreren austauschbaren Panels AWT, Swing, JavaFX & SWT 3
S JTable audrucken, aber mit mehreren Footers und Headers AWT, Swing, JavaFX & SWT 2
O Zwischen mehreren Bildern wechseln AWT, Swing, JavaFX & SWT 6
S Enter in JLabel - oder: JTabbedPane mit mehreren JLabel AWT, Swing, JavaFX & SWT 3
I Arbeiten mit mehreren Fenstern AWT, Swing, JavaFX & SWT 4
H jar-archive mit mehreren Klassen erstellen AWT, Swing, JavaFX & SWT 3
G Organisation Anwendung mit mehreren Eingabedialogen AWT, Swing, JavaFX & SWT 3
L Probleme mit mehreren Canvas: Überlagerungseffekte? AWT, Swing, JavaFX & SWT 5
N JComboBox mit mehreren Spalten AWT, Swing, JavaFX & SWT 21
Q Auf mehreren JPanels Bilder zeichnen. AWT, Swing, JavaFX & SWT 5
T Swing: MainForm mit mehreren Tabs AWT, Swing, JavaFX & SWT 6
K Spaltenbreite von mehreren Tabellen gleichzeitig verändern AWT, Swing, JavaFX & SWT 3
H JTable Text aus mehreren Zellen in einer Spalte kopieren? AWT, Swing, JavaFX & SWT 3
R Navigieren zwischen mehreren Fenstern AWT, Swing, JavaFX & SWT 7
U Anwendung mit mehreren "Fenstern" AWT, Swing, JavaFX & SWT 4
M JDialog mit mehreren Eingabenfeldern? AWT, Swing, JavaFX & SWT 5
M jtabbedpane mit mehreren layoutmanagern? AWT, Swing, JavaFX & SWT 2
V Werte mehreren Checkboxes zuweisen AWT, Swing, JavaFX & SWT 3
T JList mit mehreren spalten AWT, Swing, JavaFX & SWT 2
M Mit mehreren Panels arbeiten AWT, Swing, JavaFX & SWT 2
A JFrame mit mehreren Panels AWT, Swing, JavaFX & SWT 10
P JTable nach mehreren Spalten sortieren AWT, Swing, JavaFX & SWT 15
V JTable mit mehreren Componenten in einer Spalte ? AWT, Swing, JavaFX & SWT 6
M Dialog mit mehreren Komponenten AWT, Swing, JavaFX & SWT 4
N Checkbox mit mehreren Strings belegen? AWT, Swing, JavaFX & SWT 6
I AWT java.awt.FileDialog - "coffee cup"-Icon lässt sich nicht ersetzen AWT, Swing, JavaFX & SWT 14
P Swing Icon einfügen wirft eine Fehlermeldung AWT, Swing, JavaFX & SWT 3
J JButton Icon hinzufügen AWT, Swing, JavaFX & SWT 5
U Swing JButton mit Icon AWT, Swing, JavaFX & SWT 7
N Swing Image aus Web laden und in Icon umwandeln AWT, Swing, JavaFX & SWT 4
krgewb Swing Icon von Button AWT, Swing, JavaFX & SWT 12
Shallty JavaFX MenuItem (Info) Icon ändern AWT, Swing, JavaFX & SWT 7
Legi Swing JButton Icon verschiebt sich AWT, Swing, JavaFX & SWT 2
U AWT Smoother Icon AWT, Swing, JavaFX & SWT 2
D Kein Icon beim JTabbedPane AWT, Swing, JavaFX & SWT 1
S JavaFX TreeItem: Icon am Ende eines Eintrags anhängen AWT, Swing, JavaFX & SWT 2
D Icon in Menuitem einfügen AWT, Swing, JavaFX & SWT 8
C Icon in der Spaltenüberschrift AWT, Swing, JavaFX & SWT 1
C SWT Treeview mit Bilder im Label verändert Expanded Icon AWT, Swing, JavaFX & SWT 1
Tom299 JavaFX TreeView Expanded-Icon ändern AWT, Swing, JavaFX & SWT 0
E Swing Error icon in der TextArea AWT, Swing, JavaFX & SWT 1
D JButton - Nur Icon anzeigen / transparenter Hintergrund AWT, Swing, JavaFX & SWT 2
M label mit icon verschieben. AWT, Swing, JavaFX & SWT 1
M JavaFX wie kann mann sein frame mit einem Icon fersehen? AWT, Swing, JavaFX & SWT 2
C JavaFX Application -Icon wird falsch dargestellt AWT, Swing, JavaFX & SWT 7
J JavaFX TextArea dynamisch Icon im Background anzeigen AWT, Swing, JavaFX & SWT 2
P Image oder Icon auf Tooltip zeichnen AWT, Swing, JavaFX & SWT 4
D JavaFX - MenuItem mit Icon AWT, Swing, JavaFX & SWT 1
T JFrame Icon unter Linux/Ubuntu AWT, Swing, JavaFX & SWT 11
A Swing JColorChooser's Icon will nicht getauscht werden. AWT, Swing, JavaFX & SWT 10
B JAVAFX icon in ComboBox einfügen AWT, Swing, JavaFX & SWT 5
H Javafx - Menuitem - Icon AWT, Swing, JavaFX & SWT 4
J JComboBox Dropdown Icon AWT, Swing, JavaFX & SWT 2
vodkaz JButtonz Icon&Background AWT, Swing, JavaFX & SWT 3
B Windowbuilder - Icon für Button einbinden AWT, Swing, JavaFX & SWT 2
B Icon AWT, Swing, JavaFX & SWT 5
E Swing JFrame Icon AWT, Swing, JavaFX & SWT 3
F icon aus exe auslesen mithilfe des JFilechooser ? AWT, Swing, JavaFX & SWT 4
F DefaultTreeCellEditor - Fragen zur Groesse und zum Icon beim Editieren AWT, Swing, JavaFX & SWT 4
H Label mit Icon positionieren AWT, Swing, JavaFX & SWT 14
H Image Icon ersetzen AWT, Swing, JavaFX & SWT 8

Ähnliche Java Themen

Neue Themen


Oben