3

I used Maven Profiles in my Java project.

I created web-processing-jxbrowser module with pom.xml contains three profiles as: linux-deploy, mac-deploy and windows-deploy.

It works for me when there is dependency to one lib (with no dependencies inside) but in the case of jxbrowser it looks different (do not work).

<profiles>

    <profile>
        <id>windows-deploy</id>

        <dependencies>
            <dependency>
                <groupId>com.teamdev.jxbrowser</groupId>
                <artifactId>jxbrowser-win</artifactId>
                <version>${jxbrowser.version}</version>
            </dependency>
        </dependencies>
    </profile>

    <profile>
        <id>mac-deploy</id>

        <dependencies>
            <dependency>
                <groupId>com.teamdev.jxbrowser</groupId>
                <artifactId>jxbrowser-mac</artifactId>
                <version>${jxbrowser.version}</version>
            </dependency>
        </dependencies>
    </profile>

    <profile>
        <id>linux-deploy</id>

        <dependencies>
            <dependency>
                <groupId>com.teamdev.jxbrowser</groupId>
                <artifactId>jxbrowser-linux64</artifactId>
                <version>${jxbrowser.version}</version>
            </dependency>
        </dependencies>
    </profile>

</profiles>

And for example for mac-deploy when I looked inside jxbrowser-mac it got inside other dependency - to main jxbrowser lib and it looks like that:

<?xml version="1.0" ?>
<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 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>com.teamdev.jxbrowser</groupId>
    <artifactId>jxbrowser-mac</artifactId>
    <version>6.12</version>
    <dependencies>
        <dependency>
            <groupId>com.teamdev.jxbrowser</groupId>
            <artifactId>jxbrowser</artifactId>
            <version>6.12</version>
        </dependency>
    </dependencies>
</project>

I got also set up repository to download right libs:

<repositories>
    <repository>
        <id>com.teamdev</id>
        <url>http://maven.teamdev.com/repository/products</url>
    </repository>
</repositories>

... and in compilation it download correct libs (I see them in external libs).

License dependency is added correct in <dependencies>...</dependencies> and looks like that :

<dependency>
    <groupId>license</groupId>
    <artifactId>license</artifactId>
    <version>${jxbrowser.version}</version>
    <scope>system</scope>
    <systemPath>${basedir}/resources/libs/license.jar</systemPath>
</dependency>

It compiled well but when I try to run application it can not find the main jxbrowser lib.

I found temporary solution with adding this lib dependency to <dependencies>...</dependencies> as below:

<dependencies>

    <dependency>
        <groupId>license</groupId>
        <artifactId>license</artifactId>
        <version>${jxbrowser.version}</version>
        <scope>system</scope>
        <systemPath>${basedir}/resources/libs/license.jar</systemPath>
    </dependency>

    <dependency>
        <groupId>com.teamdev.jxbrowser</groupId>
        <artifactId>jxbrowser-win</artifactId>
        <version>${jxbrowser.version}</version>
    </dependency>

    <dependency>
        <groupId>com.teamdev.jxbrowser</groupId>
        <artifactId>jxbrowser-mac</artifactId>
        <version>${jxbrowser.version}</version>
    </dependency>

    <dependency>
        <groupId>com.teamdev.jxbrowser</groupId>
        <artifactId>jxbrowser-linux64</artifactId>
        <version>${jxbrowser.version}</version>
    </dependency>

</dependencies>

...but I do not want to download all libs when I need once of them on current platform.

After compile works (jxbrowser is running correct) but there is a question:

Why the libs are not included well when dependency is typing by profile ?

When I used the same setting in other module - it works (because here is dependency for one lib - not to lib with other dependency inside)

I think that there is some problem with dependency inside other dependency (as dependency to jxbrower lib inside jxbrowser-mac dependency)

Error while runnig app:

java.lang.NoClassDefFoundError: com/teamdev/jxbrowser/chromium/swing/BrowserView
    at com.goodsoft.stockbox.jxbrowser.JxBrowser.initAndDisplayUI(JxBrowser.java:34)
    at com.goodsoft.stockbox.market.view.window.StockBoxWindowController.lambda$createMenuWindow$17(StockBoxWindowController.java:211)
    at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:2022)
    at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2348)
    at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:402)
    at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:259)
    at javax.swing.AbstractButton.doClick(AbstractButton.java:376)
    at javax.swing.plaf.basic.BasicMenuItemUI.doClick(BasicMenuItemUI.java:833)
    at javax.swing.plaf.basic.BasicMenuItemUI$Handler.mouseReleased(BasicMenuItemUI.java:877)
    at java.awt.Component.processMouseEvent(Component.java:6535)
    at javax.swing.JComponent.processMouseEvent(JComponent.java:3324)
    at java.awt.Component.processEvent(Component.java:6300)
    at java.awt.Container.processEvent(Container.java:2236)
    at java.awt.Component.dispatchEventImpl(Component.java:4891)
    at java.awt.Container.dispatchEventImpl(Container.java:2294)
    at java.awt.Component.dispatchEvent(Component.java:4713)
    at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4888)
    at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4525)
    at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4466)
    at java.awt.Container.dispatchEventImpl(Container.java:2280)
    at java.awt.Window.dispatchEventImpl(Window.java:2750)
    at java.awt.Component.dispatchEvent(Component.java:4713)
    at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:758)
    at java.awt.EventQueue.access$500(EventQueue.java:97)
    at java.awt.EventQueue$3.run(EventQueue.java:709)
    at java.awt.EventQueue$3.run(EventQueue.java:703)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:76)
    at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:86)
    at java.awt.EventQueue$4.run(EventQueue.java:731)
    at java.awt.EventQueue$4.run(EventQueue.java:729)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:76)
    at java.awt.EventQueue.dispatchEvent(EventQueue.java:728)
    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)
Caused by: java.lang.ClassNotFoundException: com.teamdev.jxbrowser.chromium.swing.BrowserView
    at java.net.URLClassLoader.findClass(URLClassLoader.java:381)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
    ... 40 more

EDIT

When I add to <dependencies>...</dependencies> the dependency to main jxbrowser lib i get error that can not find resources for Mac :

12:03:25 SEVERE: The /chromium-mac.xz resource cannot be found in JAR files
java.lang.ClassNotFoundException: com.teamdev.jxbrowser.chromium.internal.res.IDEAJARAnalyzerFixMac
    at java.net.URLClassLoader.findClass(URLClassLoader.java:381)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
    at java.lang.Class.forName0(Native Method)
    at java.lang.Class.forName(Class.java:264)
    at com.teamdev.jxbrowser.chromium.internal.v.a(SourceFile:94)
    at com.teamdev.jxbrowser.chromium.internal.v.a(SourceFile:33)
    at com.teamdev.jxbrowser.chromium.internal.b.run(SourceFile:1054)
    at java.security.AccessController.doPrivileged(Native Method)
    at com.teamdev.jxbrowser.chromium.internal.ChromiumExtractor.extract(SourceFile:47)
    at com.teamdev.jxbrowser.chromium.internal.ipc.IPC.<init>(SourceFile:1096)
    at com.teamdev.jxbrowser.chromium.internal.ipc.IPC.create(SourceFile:49)
    at com.teamdev.jxbrowser.chromium.internal.ipc.IPC$a.<clinit>(SourceFile:39)
    at com.teamdev.jxbrowser.chromium.internal.ipc.IPC.getDefault(SourceFile:43)
    at com.teamdev.jxbrowser.chromium.BrowserContext.<init>(SourceFile:63)
    at com.teamdev.jxbrowser.chromium.BrowserContext.<clinit>(SourceFile:25)
    at com.teamdev.jxbrowser.chromium.Browser.<init>(SourceFile:131)
    at com.goodsoft.stockbox.jxbrowser.TabFactory.createTab(TabFactory.java:27)
    at com.goodsoft.stockbox.jxbrowser.TabFactory.createFirstTab(TabFactory.java:19)
    at com.goodsoft.stockbox.jxbrowser.JxBrowser.initAndDisplayUI(JxBrowser.java:34)
    at com.goodsoft.stockbox.market.view.window.StockBoxWindowController.lambda$createMenuWindow$17(StockBoxWindowController.java:211)
    at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:2022)
    at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2348)
    at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:402)
    at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:259)
    at javax.swing.AbstractButton.doClick(AbstractButton.java:376)
    at javax.swing.plaf.basic.BasicMenuItemUI.doClick(BasicMenuItemUI.java:833)
    at javax.swing.plaf.basic.BasicMenuItemUI$Handler.mouseReleased(BasicMenuItemUI.java:877)
    at java.awt.Component.processMouseEvent(Component.java:6535)
    at javax.swing.JComponent.processMouseEvent(JComponent.java:3324)
    at java.awt.Component.processEvent(Component.java:6300)
    at java.awt.Container.processEvent(Container.java:2236)
    at java.awt.Component.dispatchEventImpl(Component.java:4891)
    at java.awt.Container.dispatchEventImpl(Container.java:2294)
    at java.awt.Component.dispatchEvent(Component.java:4713)
    at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4888)
    at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4525)
    at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4466)
    at java.awt.Container.dispatchEventImpl(Container.java:2280)
    at java.awt.Window.dispatchEventImpl(Window.java:2750)
    at java.awt.Component.dispatchEvent(Component.java:4713)
    at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:758)
    at java.awt.EventQueue.access$500(EventQueue.java:97)
    at java.awt.EventQueue$3.run(EventQueue.java:709)
    at java.awt.EventQueue$3.run(EventQueue.java:703)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:76)
    at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:86)
    at java.awt.EventQueue$4.run(EventQueue.java:731)
    at java.awt.EventQueue$4.run(EventQueue.java:729)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:76)
    at java.awt.EventQueue.dispatchEvent(EventQueue.java:728)
    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)

12253 [AWT-EventQueue-0] ERROR root  -  [APP] Application error
java.lang.ExceptionInInitializerError
    at com.teamdev.jxbrowser.chromium.internal.ipc.IPC.getDefault(SourceFile:43)
    at com.teamdev.jxbrowser.chromium.BrowserContext.<init>(SourceFile:63)
    at com.teamdev.jxbrowser.chromium.BrowserContext.<clinit>(SourceFile:25)
    at com.teamdev.jxbrowser.chromium.Browser.<init>(SourceFile:131)
    at com.goodsoft.stockbox.jxbrowser.TabFactory.createTab(TabFactory.java:27)
    at com.goodsoft.stockbox.jxbrowser.TabFactory.createFirstTab(TabFactory.java:19)
    at com.goodsoft.stockbox.jxbrowser.JxBrowser.initAndDisplayUI(JxBrowser.java:34)
    at com.goodsoft.stockbox.market.view.window.StockBoxWindowController.lambda$createMenuWindow$17(StockBoxWindowController.java:211)
    at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:2022)
    at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2348)
    at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:402)
    at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:259)
    at javax.swing.AbstractButton.doClick(AbstractButton.java:376)
    at javax.swing.plaf.basic.BasicMenuItemUI.doClick(BasicMenuItemUI.java:833)
    at javax.swing.plaf.basic.BasicMenuItemUI$Handler.mouseReleased(BasicMenuItemUI.java:877)
    at java.awt.Component.processMouseEvent(Component.java:6535)
    at javax.swing.JComponent.processMouseEvent(JComponent.java:3324)
    at java.awt.Component.processEvent(Component.java:6300)
    at java.awt.Container.processEvent(Container.java:2236)
    at java.awt.Component.dispatchEventImpl(Component.java:4891)
    at java.awt.Container.dispatchEventImpl(Container.java:2294)
    at java.awt.Component.dispatchEvent(Component.java:4713)
    at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4888)
    at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4525)
    at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4466)
    at java.awt.Container.dispatchEventImpl(Container.java:2280)
    at java.awt.Window.dispatchEventImpl(Window.java:2750)
    at java.awt.Component.dispatchEvent(Component.java:4713)
    at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:758)
    at java.awt.EventQueue.access$500(EventQueue.java:97)
    at java.awt.EventQueue$3.run(EventQueue.java:709)
    at java.awt.EventQueue$3.run(EventQueue.java:703)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:76)
    at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:86)
    at java.awt.EventQueue$4.run(EventQueue.java:731)
    at java.awt.EventQueue$4.run(EventQueue.java:729)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:76)
    at java.awt.EventQueue.dispatchEvent(EventQueue.java:728)
    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)
Caused by: com.teamdev.jxbrowser.chromium.internal.ChromiumExtractorException: Failed to extract chromium binaries into /var/folders/51/jhnyhq212kz_nkn_0wq5j8000000gn/T/jxbrowser-chromium-55.0.2883.87.6.12
    at com.teamdev.jxbrowser.chromium.internal.ChromiumExtractor.extract(SourceFile:75)
    at com.teamdev.jxbrowser.chromium.internal.ipc.IPC.<init>(SourceFile:1096)
    at com.teamdev.jxbrowser.chromium.internal.ipc.IPC.create(SourceFile:49)
    at com.teamdev.jxbrowser.chromium.internal.ipc.IPC$a.<clinit>(SourceFile:39)
    ... 46 more
Caused by: java.lang.IllegalArgumentException: The /chromium-mac.xz resource cannot be found in JAR files
    at com.teamdev.jxbrowser.chromium.internal.v.a(SourceFile:105)
    at com.teamdev.jxbrowser.chromium.internal.v.a(SourceFile:33)
    at com.teamdev.jxbrowser.chromium.internal.b.run(SourceFile:1054)
    at java.security.AccessController.doPrivileged(Native Method)
    at com.teamdev.jxbrowser.chromium.internal.ChromiumExtractor.extract(SourceFile:47)
    ... 49 more
ACz
  • 567
  • 5
  • 22

1 Answers1

0

You have to explicitly add this dependency (regardless of the profile) in your pom:

   <dependency>
        <groupId>com.teamdev.jxbrowser</groupId>
        <artifactId>jxbrowser</artifactId>
        <version>6.12</version>
    </dependency>

From what you asked, I'm not sure if you are doing this.

It is this jar that contains the swing package. The jar per OS have a package name like this: com.jxbrowser.chromium.internal.res.

pringi
  • 3,987
  • 5
  • 35
  • 45
  • But why when I add in `...` the ` com.teamdev.jxbrowser jxbrowser-mac ${jxbrowser.version} ` as I wrote and it works but in profiles - not. Why? – ACz Feb 03 '17 at 10:46
  • I don't know. I opened that jar and it only contains a package like : com.jxbrowser.chromium.internal.res.*. You must have something else in your pom that makes that working. – pringi Feb 03 '17 at 10:49
  • Yes, You are tight but it generates own `jxbrowser-mac-6.12.pom` and inside there is the dependency to main artifactId as `jxbrowser` (as I wrote above) – ACz Feb 03 '17 at 10:57
  • I edit my post, check which error is shown when I add dependency to main `jxbrowser` lib in `...`. And anyway it can not find the `jxbrowser-mac` set up by profile – ACz Feb 03 '17 at 11:05
  • Are you building a fat-jar or something like that? When you run your application are you specifying a classpath to the jars from jxbrowser? Don't forget that although you are specifying dependencies in pom, they are not included by default in you application jar, unless you create a fat-jar. – pringi Feb 03 '17 at 11:14
  • What do you mean by `fat-jar` ? – ACz Feb 03 '17 at 11:16
  • A "final" jar that also includes the needed dependencies classes (http://stackoverflow.com/questions/19150811/what-is-a-fat-jar). – pringi Feb 03 '17 at 11:16
  • Yes that is it. – ACz Feb 03 '17 at 11:19
  • But it is weird, when I use the profiles (ex mac-deploy) when I compile it download correct libs (`jxbrowser` and `jxbrowser-mac` with right 6.12 version as i set up) but can not see them at runtime. When I add this dependency in `...` then it works. – ACz Feb 03 '17 at 11:26
  • My name is Vladimir. I'm a developer in JxBrowser team. I would like to check what's going on with your maven project configuration. To analyze what happens and why you see this behavior, could you please share your pom.xml, so I could reproduce this issue in my local environment and find out root cause? – Vladimir Feb 03 '17 at 22:18
  • @Vladimir I found information that using Profiles can be problem with using multiplying dependency like parent dependency and child dependency inside. There can not be problem with pom.xml configuration or profile because I used the same scheme to other libs (without child dependency) and it works. – ACz Feb 06 '17 at 07:48