LINUX.ORG.RU

WorldWind и Java

 ,


0

2

Всем привет! Столкнулся с проблемой. Использую библиотеку WorldWind NASA-скую в своем проекте. Сам проект пишу в Idea 14 на Java 8. В Idea все компилируется и запускается отлично, но как только я попытался собрать jar-with-dependencies возникла проблема. При запуске jar-ка вываливается:

 Java HotSpot(TM) 64-Bit Server VM warning: You have loaded library /tmp/jogamp_0000/file_cache/jln2853478832317459843/jln6471099643623499225/libgluegen-rt.so which might have disabled stack guard. The VM will try to fix the stack guard now.
It's highly recommended that you fix the library with 'execstack -c <libfile>', or link it with '-z noexecstack'.
Exception in Application constructor
13:18:52.415 [main] ERROR e.p.a.geotarget.GeoTargetApplication - java.lang.RuntimeException: Unable to construct Application instance: class myapp.GeoTargetApplication
        at com.sun.javafx.application.LauncherImpl.launchApplication1(LauncherImpl.java:907)
        at com.sun.javafx.application.LauncherImpl.lambda$launchApplication$152(LauncherImpl.java:182)
        at com.sun.javafx.application.LauncherImpl$$Lambda$55/1556956098.run(Unknown Source)
        at java.lang.Thread.run(Thread.java:745)
Caused by: java.lang.reflect.InvocationTargetException
        at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
        at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
        at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
        at java.lang.reflect.Constructor.newInstance(Constructor.java:422)
        at com.sun.javafx.application.LauncherImpl.lambda$launchApplication1$158(LauncherImpl.java:819)
        at com.sun.javafx.application.LauncherImpl$$Lambda$56/793261514.run(Unknown Source)
        at com.sun.javafx.application.PlatformImpl.lambda$runAndWait$172(PlatformImpl.java:326)
        at com.sun.javafx.application.PlatformImpl$$Lambda$51/1766822961.run(Unknown Source)
        at com.sun.javafx.application.PlatformImpl.lambda$null$170(PlatformImpl.java:295)
        at com.sun.javafx.application.PlatformImpl$$Lambda$53/1889656903.run(Unknown Source)
        at java.security.AccessController.doPrivileged(Native Method)
        at com.sun.javafx.application.PlatformImpl.lambda$runLater$171(PlatformImpl.java:294)
        at com.sun.javafx.application.PlatformImpl$$Lambda$52/1496724653.run(Unknown Source)
        at com.sun.glass.ui.InvokeLaterDispatcher$Future.run(InvokeLaterDispatcher.java:95)
        at com.sun.glass.ui.gtk.GtkApplication._runLoop(Native Method)
        at com.sun.glass.ui.gtk.GtkApplication.lambda$null$48(GtkApplication.java:139)
        at com.sun.glass.ui.gtk.GtkApplication$$Lambda$41/1364335809.run(Unknown Source)
        ... 1 more
Caused by: myapp.GeoTargetException: java.util.concurrent.ExecutionException: java.lang.UnsatisfiedLinkError: /tmp/jogamp_0000/file_cache/jln2853478832317459843/jln6471099643623499225/libgluegen-rt.so: /tmp/jogamp_0000/file_cache/jln2853478832317459843/jln6471099643623499225/libgluegen-rt.so: неправильный класс ELF: ELFCLASS32 (Possible cause: architecture word width mismatch)
        at myapp.ui.controls.WorldWindNode.<init>(WorldWindNode.java:40)
        at myapp.GeoTargetApplication.<init>(GeoTargetApplication.java:53)
        ... 18 more
Caused by: java.util.concurrent.ExecutionException: java.lang.UnsatisfiedLinkError: /tmp/jogamp_0000/file_cache/jln2853478832317459843/jln6471099643623499225/libgluegen-rt.so: /tmp/jogamp_0000/file_cache/jln2853478832317459843/jln6471099643623499225/libgluegen-rt.so: неправильный класс ELF: ELFCLASS32 (Possible cause: architecture word width mismatch)
        at java.util.concurrent.FutureTask.report(FutureTask.java:122)
        at java.util.concurrent.FutureTask.get(FutureTask.java:192)
        at myapp.ui.controls.WorldWindNode.<init>(WorldWindNode.java:36)
        ... 19 more
Caused by: java.lang.UnsatisfiedLinkError: /tmp/jogamp_0000/file_cache/jln2853478832317459843/jln6471099643623499225/libgluegen-rt.so: /tmp/jogamp_0000/file_cache/jln2853478832317459843/jln6471099643623499225/libgluegen-rt.so: неправильный класс ELF: ELFCLASS32 (Possible cause: architecture word width mismatch)
        at java.lang.ClassLoader$NativeLibrary.load(Native Method)
        at java.lang.ClassLoader.loadLibrary0(ClassLoader.java:1937)
        at java.lang.ClassLoader.loadLibrary(ClassLoader.java:1822)
        at java.lang.Runtime.load0(Runtime.java:809)
        at java.lang.System.load(System.java:1086)
        at com.jogamp.common.jvm.JNILibLoaderBase.loadLibraryInternal(JNILibLoaderBase.java:575)
        at com.jogamp.common.jvm.JNILibLoaderBase.access$000(JNILibLoaderBase.java:64)
        at com.jogamp.common.jvm.JNILibLoaderBase$DefaultAction.loadLibrary(JNILibLoaderBase.java:96)
        at com.jogamp.common.jvm.JNILibLoaderBase.loadLibrary(JNILibLoaderBase.java:459)
        at com.jogamp.common.os.DynamicLibraryBundle$GlueJNILibLoader.loadLibrary(DynamicLibraryBundle.java:388)
        at com.jogamp.common.os.Platform$1.run(Platform.java:209)
        at java.security.AccessController.doPrivileged(Native Method)
        at com.jogamp.common.os.Platform.<clinit>(Platform.java:179)
        at javax.media.opengl.GLProfile.<clinit>(GLProfile.java:120)
        at gov.nasa.worldwind.Configuration.getMaxCompatibleGLProfile(Unknown Source)
        at gov.nasa.worldwind.Configuration.getRequiredGLCapabilities(Unknown Source)
        at gov.nasa.worldwind.awt.WorldWindowGLJPanel.<init>(Unknown Source)
        at myapp.ui.controls.WorldWindNode.lambda$new$12(WorldWindNode.java:25)
        at myapp.ui.controls.WorldWindNode$$Lambda$80/619798096.call(Unknown Source)
        at java.util.concurrent.FutureTask.run(FutureTask.java:266)
        at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:311)
        at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:749)
        at java.awt.EventQueue.access$500(EventQueue.java:97)
        at java.awt.EventQueue$3.run(EventQueue.java:702)
        at java.awt.EventQueue$3.run(EventQueue.java:696)
        at java.security.AccessController.doPrivileged(Native Method)
        at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:75)
        at java.awt.EventQueue.dispatchEvent(EventQueue.java:719)
        at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:201)
        at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:116)
        at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:105)
        at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101)
        at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:93)
        at java.awt.EventDispatchThread.run(EventDispatchThread.java:82)

Сам же jar-ник я собирал так:

  <build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <version>3.2</version>
            <configuration>
                <source>1.8</source>
                <target>1.8</target>
            </configuration>
        </plugin>
        <plugin>
            <artifactId>maven-assembly-plugin</artifactId>
            <version>2.5.3</version>
            <configuration>
                <archive>
                    <manifest>
                        <mainClass>myapp.mainClass</mainClass>
                    </manifest>
                </archive>
                <descriptorRefs>
                    <descriptorRef>jar-with-dependencies</descriptorRef>
                </descriptorRefs>
            </configuration>
            <executions>
                <execution>
                    <id>make-assembly</id>
                    <phase>package</phase>
                    <goals>
                        <goal>single</goal>
                    </goals>
                </execution>
            </executions>
        </plugin>
        <plugin>
            <groupId>com.github.igor-petruk.protobuf</groupId>
            <artifactId>protobuf-maven-plugin</artifactId>
            <version>0.6.5</version>
            <executions>
                <execution>
                    <configuration>
                        <outputDirectory>src/main/java</outputDirectory>
                        <cleanOutputFolder>false</cleanOutputFolder>
                    </configuration>

                    <goals>
                        <goal>run</goal>
                    </goals>
                </execution>
            </executions>
        </plugin>
    </plugins>
</build>

Зависимости нужные(как раз из-за которых и вываливается ошибка)

 <dependency>
            <groupId>gov.nasa</groupId>
            <artifactId>worldwind</artifactId>
            <version>2.0.0</version>
        </dependency>

        <dependency>
            <groupId>gov.nasa</groupId>
            <artifactId>worldwindx</artifactId>
            <version>2.0.0</version>
        </dependency>

        <dependency>
            <groupId>org.jogamp.jogl</groupId>
            <artifactId>jogl-all-main</artifactId>
            <version>2.2.4</version>
        </dependency>

        <dependency>
            <groupId>org.jogamp.gluegen</groupId>
            <artifactId>gluegen-rt-main</artifactId>
            <version>2.2.4</version>
        </dependency>

Сам работаю под debian 8, amd64. Почему у меня в Idea все собирается и работает, а maven подкладывает какие-то другие библиотеки?Как мне решить мою проблему? Хотелось бы, чтобы мне maven собирал цельный jar-ик сразу) Заранее спасибо!


Там написано, что у тебя DLL'ка не от той платформы, у теб 64-битная, а лежит 32-битная. Пакеты jogamp хитрые, там есть нативные либы. Если бы собирал не мавеном, приходилось бы руками копировать нужные, а в мавене что-то там платформу определяет. Вероятно твой assembly плагин не справляется - либо вообще не доходит до фазы когда подкладываются 64-битные либы, либо модифицирует ее, или еще что. Попробуй maven shade plugin. Ну и надо тебе сесть и разобраться, на какой фазе и с какими настройками подкладываются либы.

stevejobs ★★★★☆
()
Ответ на: комментарий от stevejobs

или может быть можно как-то руками найти нужные либы и подложить их в джарку

stevejobs ★★★★☆
()
Ответ на: комментарий от stevejobs

Спасибо за ответ! Я понял, что дело в либе,но как сделать чтобы все автоматом было я не понял) Но почему у меня Idea кладет то, что нужно?А Maven нет? Сейчас попробую плагин.

aarexer
() автор топика
Ответ на: комментарий от aarexer

это не «maven нет», а конкретно maven assembly plugin, конкретно с твоими хитрыми пакетами jogamp. Ну не подружились где-то, бывает. Если интересно как это починить - придется тебе разбираться самостоятельно.

Рекомендую начать с понимания, что у мавена есть так называемся фазы лайфцайкла: http://maven.apache.org/guides/introduction/introduction-to-the-lifecycle.html

Когда ты используешь какие-то плагины, или другие пакеты типа gluegen-rt-main, они все подцепляются к разным фазам и хитро друг с другом взаимодействуют. В результате взаимодействия может получиться фигня. Когда получается фигня, надо засучивать рукава, и погружаться с головой говны.

Например, gluegen-rt-main на какой фазе подкладывает dll'ки? На package, или может вообще на generate-sources? И если на package, не получается ли так, что package внутри gluegen-rt-main как-то неприятно пересекается с assembly plugin? Может, они друг друга перекрывают? Или переписывают какие-то важные для сборки переменные?

Ну это тебе разбираться, какбе xD

stevejobs ★★★★☆
()
Ответ на: комментарий от aarexer

если убрать вообще нафиг shade и assembly, и потом сказать mvn clean package, и потом посмотреть что лежит в ./target, там лежат нужные dll'ки?

stevejobs ★★★★☆
()
Ответ на: комментарий от stevejobs

В итоге помогло вот что! Ты был прав!Все дело - в assembly плагине. Заменил на:

            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-dependency-plugin</artifactId>
                <executions>
                    <execution>
                        <id>copy-dependencies</id>
                        <phase>prepare-package</phase>
                        <goals>
                            <goal>copy-dependencies</goal>
                        </goals>
                        <configuration>
                            <outputDirectory>${project.build.directory}/lib</outputDirectory>
                            <overWriteReleases>false</overWriteReleases>
                            <overWriteSnapshots>false</overWriteSnapshots>
                            <overWriteIfNewer>true</overWriteIfNewer>
                        </configuration>
                    </execution>
                </executions>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-jar-plugin</artifactId>
                <configuration>
                    <archive>
                        <manifest>
                            <addClasspath>true</addClasspath>
                            <classpathPrefix>lib/</classpathPrefix>
                            <mainClass>MyMainClass</mainClass>
                        </manifest>
                    </archive>
                </configuration>
            </plugin>

aarexer
() автор топика

а что за библиотека такая? Как используешь? судя по вики - хз как её применить..

ii8_ ★★★★
()
Ответ на: комментарий от ii8_

Это типа отрисовка земного шара в 3d. Там разные слои подключаешь, какие надо тебе и получаешь что хочешь. Применить ну движение кораблей,машин, дронов, подлодок отрисовывать можно, да даже спутников.

aarexer
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.