[ https://issues.apache.org/jira/browse/NUTCH-2106?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=14847281#comment-14847281 ]
Sebastian Nagel commented on NUTCH-2106: ---------------------------------------- Avoiding conflicting dependencies is the reason for the Nutch plugin system [[1|https://wiki.apache.org/nutch/WhatsTheProblemWithPluginsAndClass-loading]]. However, if a plugin depends on another plugin and both depend on a library, there is no way: both plugins must rely on the same version (or two versions with compatible API). - protocol-selenium depends on lib-selenium - both depend on selenium-java (currently the same version) - when the plugin protocol-selenium is loaded the lib-selenium.jar is just added to the classpath of protocol-selenium's own class loader. The classes from lib-selenium.jar do not live in it's own class loader! They are used directly (and not via the lib-selenium plugin instance) from classes in protocol-selenium. - the same situation for protocol-interactiveselenium As a consequence, the Selenium version used by lib-selenium dictates the version to be used by the two protocol plugins. So, why not bundle Selenium jars and dependencies in lib-selenium? > Runtime to contain Selenium and dependencies only once > ------------------------------------------------------ > > Key: NUTCH-2106 > URL: https://issues.apache.org/jira/browse/NUTCH-2106 > Project: Nutch > Issue Type: Bug > Components: build > Affects Versions: 1.11 > Reporter: Sebastian Nagel > Fix For: 1.11 > > Attachments: NUTCH-2106.patch > > > All Selenium-based plugins contain the same dependendent jars which > significantly affects the size of runtime and bin package: > {noformat} > % du -hs runtime/local/plugins/*selenium/ runtime/deploy/*.job > 25M runtime/local/plugins/lib-selenium/ > 25M runtime/local/plugins/protocol-interactiveselenium/ > 25M runtime/local/plugins/protocol-selenium/ > 182M runtime/deploy/apache-nutch-1.11-SNAPSHOT.job > {noformat} > Since all plugins depend on the same Selenium version we could bundle the > dependencies in lib-selenium and let the other plugins load it from there: > - let lib-selenium export all dependent libs, e.g.: > {code:xml|title=lib-selenium/plugin.xml} > <runtime> > ... > <library name="selenium-java-2.44.0.jar"> > <export name="*"/> > </library> > {code} > - both protocol plugins already import lib-selenium: the dependencies in > ivy.xml can be removed > As expected, these changes make the runtime smaller: > {noformat} > 25M runtime/local/plugins/lib-selenium/ > 20K runtime/local/plugins/protocol-interactiveselenium/ > 16K runtime/local/plugins/protocol-selenium/ > 138M runtime/deploy/apache-nutch-1.11-SNAPSHOT.job > {noformat} > Open points: > - I've tested only protocol-selenium using chromedriver. Should also test > protocol-interactiveselenium? > - What about phantomjsdriver-1.2.1.jar? It was contained in lib-selenium and > protocol-selenium but not protocol-interactiveselenium. Is there a reason for > this? -- This message was sent by Atlassian JIRA (v6.3.4#6332)