Sass Compiler und String erhalten?

internet

Top Contributor
Hallo,

ich suche eine Lib um eine Sass - Datei umzuwandeln und daraus den fertigen CSS Code zu erhalten.
Ich habe diese Lib gefunden, allerdings scheint diese nur ab Java 17 zu funktionieren:

Denn ich bekomme diesen Fehler:

Ursache: java.lang.UnsupportedClassVersionError: de/larsgrefer/sass/embedded/SassCompilationFailedException has been compiled by a more recent version of the Java Runtime (class file version 61.0), this version of the Java Runtime only recognizes class file versions up to 55.0

Hat jemand eine Alternative?
 
Wie wäre es, einfach die etwas ältere Version 1.12.1 zu nutzen?

Die 2er Version hat intern Spring Framework 6 und das setzt Java 17 voraus (laut Ken Kousen - habe ich nur zur Kenntnis genommen und mich gewundert, denn start.spring.io bietet da auch java 11 und 8 an ...) Die 1er Version hat noch das 5er Spring Framework referenziert.
Ich vermute, dass da ein Zusammenhang besteht - aber egal wie dem auch immer sei - die 1.12.1 sollte gehen.
 
danke.

Habe es soeben mal probiert, dann scheint mir eine Klasse zu fehlen:

Exception in thread "main" java.lang.NoClassDefFoundError: com/google/protobuf/GeneratedMessageV3

Edit:
nachdem ich diese Lib hinzugefügt habe, ging es:
Java:
<dependency>
    <groupId>com.google.protobuf</groupId>
    <artifactId>protobuf-java</artifactId>
    <version>3.22.2</version>
</dependency>
 
Zuletzt bearbeitet:
Auch wenn es jetzt läuft möchte ich kurz etwas nachhaken:

Wie fügst Du was hinzu? Die Angabe der lib deutet darauf hin, dass Du ja mit maven arbeitest. Da wäre das aber eigentlich nicht notwendig, denn:
XML:
<!-- https://mvnrepository.com/artifact/de.larsgrefer.sass/sass-embedded-host -->
<dependency>
    <groupId>de.larsgrefer.sass</groupId>
    <artifactId>sass-embedded-host</artifactId>
    <version>1.12.1</version>
</dependency>

hat eine Abhängigkeit zu
XML:
<!-- https://mvnrepository.com/artifact/de.larsgrefer.sass/sass-embedded-protocol -->
<dependency>
    <groupId>de.larsgrefer.sass</groupId>
    <artifactId>sass-embedded-protocol</artifactId>
    <version>1.12.1</version>
</dependency>


was dann die Abhängigkeit zu
XML:
<!-- https://mvnrepository.com/artifact/com.google.protobuf/protobuf-java -->
<dependency>
    <groupId>com.google.protobuf</groupId>
    <artifactId>protobuf-java</artifactId>
    <version>3.22.0</version>
</dependency>

hat.

Die Angabe der ersten Abhängigkeit sollte also eigentlich alles automatisch laden. Ein mvn dependency:tree sollte das auch genau so aufzeigen.

Edit: Ersten Satz zur Einführung hinzugefügt. Mir ist klar, dass es nun läuft aber ich wundere mich halt, dass da eine Abhängigkeit manuell hinzu genommen werden musste.
 
Mhm, gute Frage... eventuell hat das mit anderen Maven Abhängigkeiten innerhalb meinem Projekt zu tun...

Ich habe nun aber noch ein anderes Thema:

Führe ich folgenden Test innerhalb des Projekts aus, in dem die SCSS - Files liegen, erhalte ich einen String zurück.
Die scss - Files liegen im src/main/resources/files/template/... - Ordner.

Java:
public class Test {

    public static void main(String[] args) throws IOException, SassCompilationFailedException {
 
        try (SassCompiler sassCompiler = SassCompilerFactory.bundled()) {
         
            URL url = Thread.currentThread().getContextClassLoader().getResource("files/template/jsf/primefaces/rain/custom/theme-light.scss");
         
            CompileSuccess compileSuccess = sassCompiler.compile(url);
       
            //get compiled css
            String css = compileSuccess.getCss();
         
            System.out.print(css);
        }
    }
 
    private ClassLoader getContextClassLoader() {
        return Thread.currentThread().getContextClassLoader();
    }

}

Nun möchte ich aber diese Scss - Files in eine Lib speichern.

Innerhalb einem anderen Projekt möchte ich dann darauf zugreifen (das Projekt binde ich via Maven als .jar - Datei ein), sodass ich dann alle Klassen, Dateien aus diesem Projekt nutzen kann...

Allerdings erhalte beim gleichen Aufruf oben diese Fehlermeldung dann:
Error: java.lang.IllegalArgumentException: Can't handle url: vfs:/Applications/Software/wildfly-21.0.0.Final/standalone/deployments/myApp.war/WEB-INF/lib/myExternalJarApp-1.0-SNAPSHOT.jar/files/template/jsf/primefaces/rain/sass/theme/_theme_dark
Es scheint mir auch, dass das Root - File geöffnet wird.

Die theme-lights.scss sieht dann so aus:

Code:
$primaryLightColor: #57C8E5 !default;
$primaryColor: #25A4D4 !default;
$primaryDarkColor: #1B81B6 !default;
$primaryDarkerColor: #126198 !default;
$primaryTextColor: #f8fafc !default;

@import '../sass/theme/_theme_dark';

Das Problem scheint mir nun zu sein, dass der Compiler nicht auf den Pfad (../sass/theme/_theme_dark) zugreifen kann.
Wie gesagt, das Problem ist aber nur wenn ich nicht direkt im Projekt die anderen Files öffnen möchte...

Das Problem ist dann in der Klasse SassCompiler - diese wird aber beim direkten Aufruf (siehe oben "Test" nicht aufgerufen)
1679037897901.png

Edit:
Speichere ich die scss - Datein im gleichen Projekt (meine WebApp Applikation), erhalte ich ebenfalls diese Meldung:

vfs:/Applications/Software/wildfly-21.0.0.Final/standalone/deployments/myApp.war/WEB-INF/classes/files/template/jsf/primefaces/rain/sass/theme/_theme_light

Es scheint mir nun eher ein Problem beim Laden mit dem Applikations - Server zu sein, sodass er den Pfad nicht öffnen kann?
Würde man in der Lib diese Bedingung erweitern:
1679038666411.png

Denn meine Url Connection ist vom Typ: org.jboss.vfs.protocol.VirtualFileURLConnection
 
Zuletzt bearbeitet:
Spam? Welche 1.20 ????
Nicht Spam - Tobias.

Evtl. meint er die 2.x weil er schlicht den Thread nicht verstanden hat. Einfach ignorieren.

Das Problem scheint mir nun zu sein, dass der Compiler nicht auf den Pfad (../sass/theme/_theme_dark) zugreifen kann.
Das kann durchaus sein, denn dieser Zugriff auf Ressourcen greift halt wirklich auf konkrete Dateien zu. Damit werden keine Verzeichnisse aufgelistet oder so (Meiner Meinung nach - habe das nie im Detail gebraucht, aber ich meine, ich bin da schon früher einmal drüber gestolpert, dass man nicht so einfach alle Dateien in einem Pfad des Classpath auflisten kann.

Das ist aber ein etwas anders gelagertes Problem und da kann es ggf. hilfreich sein, ein neuen Thread zu starten. Den schauen Andere evtl. eher an, wenn da keine oder kaum Antworten sind. Den ganzen bisherigen Thread lesen nur um dann am Ende die neue Thematik zu finden - das ist etwas, das evtl. die, die besser helfen können, nicht machen.
 
Nicht Spam - Tobias.

Evtl. meint er die 2.x weil er schlicht den Thread nicht verstanden hat. Einfach ignorieren.


Das kann durchaus sein, denn dieser Zugriff auf Ressourcen greift halt wirklich auf konkrete Dateien zu. Damit werden keine Verzeichnisse aufgelistet oder so (Meiner Meinung nach - habe das nie im Detail gebraucht, aber ich meine, ich bin da schon früher einmal drüber gestolpert, dass man nicht so einfach alle Dateien in einem Pfad des Classpath auflisten kann.

Das ist aber ein etwas anders gelagertes Problem und da kann es ggf. hilfreich sein, ein neuen Thread zu starten. Den schauen Andere evtl. eher an, wenn da keine oder kaum Antworten sind. Den ganzen bisherigen Thread lesen nur um dann am Ende die neue Thematik zu finden - das ist etwas, das evtl. die, die besser helfen können, nicht machen.
danke dir, ich habe mal einen neuen Thread aufgemacht:
 

Zurück
Oben