Cześć,
Mam aplikację w JavieFX i chciałbym użyć bilioteki driftFX tak żeby móc przechwycić kontekst do renderowania na jakimś Node bezpośrednio przez OpenGL w GPU. Mam takie zależności:
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<repositories>
<repository>
<id>eclipsefx</id>
<url>https://repo.eclipse.org/content/groups/efxclipse/</url>
</repository>
</repositories>
<dependencies>
<dependency>
<groupId>org.openjfx</groupId>
<artifactId>javafx-controls</artifactId>
<version>17.0.2</version>
</dependency>
<dependency>
<groupId>org.openjfx</groupId>
<artifactId>javafx-fxml</artifactId>
<version>17.0.2</version>
</dependency>
<dependency>
<groupId>org.eclipse.fx</groupId>
<artifactId>org.eclipse.fx.drift</artifactId>
<version>1.0.0.rc4</version>
<scope>compile</scope>
</dependency>
</dependencies>
Oraz taki config w pomie do builda:
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.8.1</version>
<configuration>
<source>16</source>
<target>16</target>
</configuration>
</plugin>
<plugin>
<groupId>org.openjfx</groupId>
<artifactId>javafx-maven-plugin</artifactId>
<version>0.0.7</version>
<executions>
<execution>
<!-- Default configuration for running with: mvn clean javafx:run -->
<id>default-cli</id>
<configuration>
<mainClass>com.example.windowedapp/com.example.windowedapp.HelloApplication</mainClass>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
No i prawilnie dodane module-info.java:
module com.example.windowedapp {
requires javafx.controls;
requires javafx.fxml;
requires javafx.graphics;
requires org.eclipse.fx.drift;
}
Po odpaleniu paru linijek jak zaleca producent dostaję jednak wyjątek IllegalAccessException:
Caused by: java.lang.IllegalAccessError: superclass access check failed: class org.eclipse.fx.drift.impl.NGDriftFXSurface (in module org.eclipse.fx.drift) cannot access class com.sun.javafx.sg.prism.NGNode (in module javafx.graphics) because module javafx.graphics does not export com.sun.javafx.sg.prism to module org.eclipse.fx.drift
Czyli tak jakby ten kod biblioteki miał blokowany dostęp do klas JavaFX. Próbowałem kombinacji z różnymi wersjami JavaFX/Drifta i samego JDK (od 11 w górę) ale oczywiście przez moduły z 9 nie będzie to pewnie działać. Czy ktoś jest w stanie mi po ludzku wyjaśnić jak prostemu konsultantowi pracującemu na co dzień z 8 jak ten system modułów trzeba skonfigurować żeby takie sytuacje obsłużyć bo próbowałem eksportować swój pakiet do tego modułu javafx graphics czy do drifta ale za nic nie chce to działać. Niby rozumiem te importy ale mam wrażenie, że to dotyczy mojego source'a a nijak nie wpływa na to czego wymaga np. biblioteka X - strzelam że twórca tej biblioteki powinien wrzucić do module-info wszystko co potrzebuje i dać jakieś zależności np. w pom.
To co bym chciał osiągnąć to taki ekwiwalent jakbym miał cały source code biblioteki u siebie (np. tej drift) i po prostu dał requires to czy tamto z innej biblioteki (np. javafx moduł Y) :D
99xmarcinorg.eclipse.fx.drift
lub sprawdzić czy w manifeście Jara tej libki jest ustawiony automatic module name i go dodać.