Update to Eclipse 2022-06 for KNIME AP 4.7.0

Dear Community Developers

In our next feature release of KNIME Analytics Platform (4.7.0) we will be updating the underlying version of Eclipse. The release is planned for winter 2022 (early December) - no date confirmed yet.

This upgrade might require changes to 3rd party node extensions like community, partner or custom in-house extensions, especially if libraries such as Jetty, Apache POI, or Apache Batik are used. In most cases, only an update of the version ranges in the dependency declaration is needed. What weā€™d like you to do is testing the nightly build with your own custom node extension.

You can download the nightly build here or point your Eclipse IDE to an updated ā€œTarget Platformā€ by switching to the master branch in the knime-sdk-setup repository. (Details are described here).

Troubleshooting

This update should be relatively easy, please take note of the following troubleshooting tips, to ensure a smooth update.

Apple Silicon Support

With 4.7.0 we are shipping a version of AP natively built for Apple Silicon (aarch64). This might require some adjustments, to get your extensions working on this build.

  • Make sure to adapt the platform filters in feature.xml and MANIFEST.MF files to ensure that your extension can be installed in this build, (e.g. remove x86_64 architecture restrictions on Java based extensions)
  • If your extension makes use of natively compiled binaries, you will need to include a version compiled for the aarch64 architecture.

Updated / renamed libraries

Some libraries have been renamed, removed or replaced, take note of the following important examples:

  • We now ship Jetty only in version 10.0.9 (used for any temporary ā€˜localhostā€™ web-servers, e.g. for OAuth authentication)
  • We now ship Apache POI (used for Excel file processing) only in version 4.1.1
    • org.apache.servicemix.bundles.poi have been removed
    • Instead depend on the bundles org.apache.poi, org.apache.poi.ooxml and org.apache.poi.ooxml.schemas
  • Apache Batik (used for SVG image generation) for has been updated to version 1.14
  • Eclipse Birt (KNIMEā€™s reporting extension) has been updated to the proper 4.9.0 release
  • Some bundles have been renamed (e.g. bcprov to org.bouncycastle.bcprov)
  • The eclipse pug-in org.eclipse.help.ui is no longer available, as it is not required anymore. Just delete references to it from your feature.xml or other build files if you encounter error messages complaining about it missing.

Please reach out to me if you are missing any dependencies or are having trouble updating.

Important: Remove org.w3c.dom.events package imports!

You need to remove all imports of the org.w3c.dom.events package in version 3 in from your extensions MANIFEST.MF. Otherwise, installing your extension will break KNIME AP installations, as they will no longer start!

The org.w3c.dom.events import was previously required to get extensions to work that had dependencies on apache poi, knime-svg or batik, so if your extensions have one of these dependencies, make sure to check for and remove this package import!

How to debug AP startup issues

When you have dependency resolution issues, the startup of the AP becomes very slow, so you need to fix these. By enabling osgi resolver debugging, you can see these errors as they appear during startup in the terminal / eclipse console.

  • Modify the knime.ini (standalone AP) or your debug launch configuration (starting from Eclipse) and add this line to the vm arguments. Either at the end of the knime.ini file (somewhere below -vmargs) or in the arguments tab of the launch configuration.
  • -Dosgi.debug=/path/to/debug.options
  • ā€¦ whereby the debug.options file contains these lines
org.eclipse.osgi/resolver=true
org.eclipse.osgi/resolver/roots=true
org.eclipse.osgi/resolver/report=true

If you have any further questions, problems etc, please post them in this thread so I can help you with them.

Best regards,
Gabriel

11 Likes

Thanks for the instructions, are we supposed to be on Java 17 now? The target platform in the SDK repo seems to say Java-17 but the runtime config is still Java 11?

Edit: Nevermind just realised we switched to 17 from 4.6 :smiley:

2 Likes

@swebb we run the AP with Java 17, but are currently still compiling with Java 11 because of a bug in Eclipse 2021-03 (which AP 4.5 and 4.6 are based on), that makes them unable to verify jar signatures created by Java 17. Once 4.7 has been released, we will start compiling with Java 17 as well.

best,
Gabriel

Hi, Gabriel

I just to want to check my environment(KNIME 4.7.0), so I add -Dosgi.debug=/path/to/debug.options to see what happens, there are some error messages, do I need to do something? Thanks.

Part of log
RESOLVER: Capabilities being returned to the resolver
	[1] osgi.ee; osgi.ee="JavaSE"; version:List<Version>="1.0.0,1.1.0,1.2.0,1.3.0,1.4.0,1.5.0,1.6.0,1.7.0,1.8.0,9.0.0,10.0.0,11.0.0,12.0.0,13.0.0,14.0.0,15.0.0,16.0.0,17.0.0"
		of resource
			osgi.identity; type="osgi.bundle"; version:Version="3.18.0.v20220516-2155"; osgi.identity="org.eclipse.osgi"; singleton:="true"
RESOLVER: Candidate permutation failed due to a conflict between imports; will try another if possible. (Uses constraint violation. Unable to resolve resource org.pasteur.pf2.ngs [osgi.identity; type="osgi.bundle"; version:Version="0.2.300.qualifier"; osgi.identity="org.pasteur.pf2.ngs"; singleton:="true"] because it is exposed to package 'org.w3c.dom.events' from resources org.w3c.dom.events [osgi.identity; type="osgi.bundle"; version:Version="3.0.0.draft20060413_v201105210656"; osgi.identity="org.w3c.dom.events"] and org.eclipse.osgi [osgi.identity; type="osgi.bundle"; version:Version="3.18.0.v20220516-2155"; osgi.identity="org.eclipse.osgi"; singleton:="true"] via two dependency chains.

Chain 1:
  org.pasteur.pf2.ngs [osgi.identity; type="osgi.bundle"; version:Version="0.2.300.qualifier"; osgi.identity="org.pasteur.pf2.ngs"; singleton:="true"]
    import: (&(osgi.wiring.package=org.w3c.dom.events)(version>=3.0.0))
     |
    export: osgi.wiring.package: org.w3c.dom.events
  org.w3c.dom.events [osgi.identity; type="osgi.bundle"; version:Version="3.0.0.draft20060413_v201105210656"; osgi.identity="org.w3c.dom.events"]

Chain 2:
  org.pasteur.pf2.ngs [osgi.identity; type="osgi.bundle"; version:Version="0.2.300.qualifier"; osgi.identity="org.pasteur.pf2.ngs"; singleton:="true"]
    require: (&(osgi.wiring.bundle=org.knime.ext.svg)(&(bundle-version>=3.0.0)(!(bundle-version>=5.0.0))))
     |
    provide: osgi.wiring.bundle; bundle-version:Version="4.7.0.v202207050937"; osgi.wiring.bundle="org.knime.ext.svg"; singleton:="true"
  org.apache.batik.anim [osgi.identity; type="osgi.bundle"; version:Version="1.14.0.v20210324-0332"; osgi.identity="org.apache.batik.anim"]
    import: (&(osgi.wiring.package=org.apache.batik.dom)(&(version>=1.14.0)(!(version>=2.0.0))))
     |
    export: osgi.wiring.package=org.apache.batik.dom; uses:=org.w3c.dom.events
  org.apache.batik.dom [osgi.identity; type="osgi.bundle"; version:Version="1.14.0.v20210324-0332"; osgi.identity="org.apache.batik.dom"]
    import: (osgi.wiring.package=org.w3c.dom.events)
     |
    export: osgi.wiring.package: org.w3c.dom.events
  org.eclipse.osgi [osgi.identity; type="osgi.bundle"; version:Version="3.18.0.v20220516-2155"; osgi.identity="org.eclipse.osgi"; singleton:="true"])

RESOLVER: Uses constraint violation
	Resource
		osgi.identity; type="osgi.bundle"; version:Version="0.2.300.qualifier"; osgi.identity="org.pasteur.pf2.ngs"; singleton:="true"
	Error
		Uses constraint violation. Unable to resolve resource org.pasteur.pf2.ngs [osgi.identity; type="osgi.bundle"; version:Version="0.2.300.qualifier"; osgi.identity="org.pasteur.pf2.ngs"; singleton:="true"] because it is exposed to package 'org.w3c.dom.events' from resources org.w3c.dom.events [osgi.identity; type="osgi.bundle"; version:Version="3.0.0.draft20060413_v201105210656"; osgi.identity="org.w3c.dom.events"] and org.eclipse.osgi [osgi.identity; type="osgi.bundle"; version:Version="3.18.0.v20220516-2155"; osgi.identity="org.eclipse.osgi"; singleton:="true"] via two dependency chains.

Chain 1:
  org.pasteur.pf2.ngs [osgi.identity; type="osgi.bundle"; version:Version="0.2.300.qualifier"; osgi.identity="org.pasteur.pf2.ngs"; singleton:="true"]
    import: (&(osgi.wiring.package=org.w3c.dom.events)(version>=3.0.0))
     |
    export: osgi.wiring.package: org.w3c.dom.events
  org.w3c.dom.events [osgi.identity; type="osgi.bundle"; version:Version="3.0.0.draft20060413_v201105210656"; osgi.identity="org.w3c.dom.events"]

Chain 2:
  org.pasteur.pf2.ngs [osgi.identity; type="osgi.bundle"; version:Version="0.2.300.qualifier"; osgi.identity="org.pasteur.pf2.ngs"; singleton:="true"]
    require: (&(osgi.wiring.bundle=org.knime.ext.svg)(&(bundle-version>=3.0.0)(!(bundle-version>=5.0.0))))
     |
    provide: osgi.wiring.bundle; bundle-version:Version="4.7.0.v202207050937"; osgi.wiring.bundle="org.knime.ext.svg"; singleton:="true"
  org.apache.batik.anim [osgi.identity; type="osgi.bundle"; version:Version="1.14.0.v20210324-0332"; osgi.identity="org.apache.batik.anim"]
    import: (&(osgi.wiring.package=org.apache.batik.dom)(&(version>=1.14.0)(!(version>=2.0.0))))
     |
    export: osgi.wiring.package=org.apache.batik.dom; uses:=org.w3c.dom.events
  org.apache.batik.dom [osgi.identity; type="osgi.bundle"; version:Version="1.14.0.v20210324-0332"; osgi.identity="org.apache.batik.dom"]
    import: (osgi.wiring.package=org.w3c.dom.events)
     |
    export: osgi.wiring.package: org.w3c.dom.events
  org.eclipse.osgi [osgi.identity; type="osgi.bundle"; version:Version="3.18.0.v20220516-2155"; osgi.identity="org.eclipse.osgi"; singleton:="true"]
RESOLVER: Wirings for resolved bundles:
org.apache.felix.resolver.reason.ReasonException: Uses constraint violation. Unable to resolve resource org.pasteur.pf2.ngs [osgi.identity; type="osgi.bundle"; version:Version="0.2.300.qualifier"; osgi.identity="org.pasteur.pf2.ngs"; singleton:="true"] because it is exposed to package 'org.w3c.dom.events' from resources org.w3c.dom.events [osgi.identity; type="osgi.bundle"; version:Version="3.0.0.draft20060413_v201105210656"; osgi.identity="org.w3c.dom.events"] and org.eclipse.osgi [osgi.identity; type="osgi.bundle"; version:Version="3.18.0.v20220516-2155"; osgi.identity="org.eclipse.osgi"; singleton:="true"] via two dependency chains.

Chain 1:
  org.pasteur.pf2.ngs [osgi.identity; type="osgi.bundle"; version:Version="0.2.300.qualifier"; osgi.identity="org.pasteur.pf2.ngs"; singleton:="true"]
    import: (&(osgi.wiring.package=org.w3c.dom.events)(version>=3.0.0))
     |
    export: osgi.wiring.package: org.w3c.dom.events
  org.w3c.dom.events [osgi.identity; type="osgi.bundle"; version:Version="3.0.0.draft20060413_v201105210656"; osgi.identity="org.w3c.dom.events"]

Chain 2:
  org.pasteur.pf2.ngs [osgi.identity; type="osgi.bundle"; version:Version="0.2.300.qualifier"; osgi.identity="org.pasteur.pf2.ngs"; singleton:="true"]
    require: (&(osgi.wiring.bundle=org.knime.ext.svg)(&(bundle-version>=3.0.0)(!(bundle-version>=5.0.0))))
     |
    provide: osgi.wiring.bundle; bundle-version:Version="4.7.0.v202207050937"; osgi.wiring.bundle="org.knime.ext.svg"; singleton:="true"
  org.apache.batik.anim [osgi.identity; type="osgi.bundle"; version:Version="1.14.0.v20210324-0332"; osgi.identity="org.apache.batik.anim"]
    import: (&(osgi.wiring.package=org.apache.batik.dom)(&(version>=1.14.0)(!(version>=2.0.0))))
     |
    export: osgi.wiring.package=org.apache.batik.dom; uses:=org.w3c.dom.events
  org.apache.batik.dom [osgi.identity; type="osgi.bundle"; version:Version="1.14.0.v20210324-0332"; osgi.identity="org.apache.batik.dom"]
    import: (osgi.wiring.package=org.w3c.dom.events)
     |
    export: osgi.wiring.package: org.w3c.dom.events
  org.eclipse.osgi [osgi.identity; type="osgi.bundle"; version:Version="3.18.0.v20220516-2155"; osgi.identity="org.eclipse.osgi"; singleton:="true"]
	at org.apache.felix.resolver.ResolverImpl$UseConstraintError.toException(ResolverImpl.java:2467)
	at org.apache.felix.resolver.ResolverImpl.doResolve(ResolverImpl.java:462)
	at org.apache.felix.resolver.ResolverImpl.resolve(ResolverImpl.java:420)
	at org.apache.felix.resolver.ResolverImpl.resolve(ResolverImpl.java:374)
	at org.eclipse.osgi.container.ModuleResolver$ResolveProcess.resolveRevisions(ModuleResolver.java:1038)
	at org.eclipse.osgi.container.ModuleResolver$ResolveProcess.resolveRevisionsInBatch(ModuleResolver.java:992)
	at org.eclipse.osgi.container.ModuleResolver$ResolveProcess.resolve(ModuleResolver.java:906)
	at org.eclipse.osgi.container.ModuleResolver.resolveDelta(ModuleResolver.java:172)
	at org.eclipse.osgi.container.ModuleContainer.resolveAndApply(ModuleContainer.java:548)
	at org.eclipse.osgi.container.ModuleContainer.resolve(ModuleContainer.java:503)
	at org.eclipse.osgi.container.ModuleContainer.resolve(ModuleContainer.java:492)
	at org.eclipse.osgi.container.Module.start(Module.java:446)
	at org.eclipse.osgi.container.ModuleContainer$ContainerStartLevel$2.run(ModuleContainer.java:1847)
	at org.eclipse.osgi.internal.framework.EquinoxContainerAdaptor$1$1.execute(EquinoxContainerAdaptor.java:136)
	at org.eclipse.osgi.container.ModuleContainer$ContainerStartLevel.incStartLevel(ModuleContainer.java:1840)
	at org.eclipse.osgi.container.ModuleContainer$ContainerStartLevel.incStartLevel(ModuleContainer.java:1781)
	at org.eclipse.osgi.container.ModuleContainer$ContainerStartLevel.doContainerStartLevel(ModuleContainer.java:1745)
	at org.eclipse.osgi.container.ModuleContainer$ContainerStartLevel.dispatchEvent(ModuleContainer.java:1667)
	at org.eclipse.osgi.container.ModuleContainer$ContainerStartLevel.dispatchEvent(ModuleContainer.java:1)
	at org.eclipse.osgi.framework.eventmgr.EventManager.dispatchEvent(EventManager.java:234)
	at org.eclipse.osgi.framework.eventmgr.EventManager$EventThread.run(EventManager.java:345)
RESOLVER: Resolution report
org.pasteur.pf2.ngs [921]
  Bundle was not resolved because of a uses constraint violation.
  org.apache.felix.resolver.reason.ReasonException: Uses constraint violation. Unable to resolve resource org.pasteur.pf2.ngs [osgi.identity; type="osgi.bundle"; version:Version="0.2.300.qualifier"; osgi.identity="org.pasteur.pf2.ngs"; singleton:="true"] because it is exposed to package 'org.w3c.dom.events' from resources org.w3c.dom.events [osgi.identity; type="osgi.bundle"; version:Version="3.0.0.draft20060413_v201105210656"; osgi.identity="org.w3c.dom.events"] and org.eclipse.osgi [osgi.identity; type="osgi.bundle"; version:Version="3.18.0.v20220516-2155"; osgi.identity="org.eclipse.osgi"; singleton:="true"] via two dependency chains.

Chain 1:
  org.pasteur.pf2.ngs [osgi.identity; type="osgi.bundle"; version:Version="0.2.300.qualifier"; osgi.identity="org.pasteur.pf2.ngs"; singleton:="true"]
    import: (&(osgi.wiring.package=org.w3c.dom.events)(version>=3.0.0))
     |
    export: osgi.wiring.package: org.w3c.dom.events
  org.w3c.dom.events [osgi.identity; type="osgi.bundle"; version:Version="3.0.0.draft20060413_v201105210656"; osgi.identity="org.w3c.dom.events"]

Chain 2:
  org.pasteur.pf2.ngs [osgi.identity; type="osgi.bundle"; version:Version="0.2.300.qualifier"; osgi.identity="org.pasteur.pf2.ngs"; singleton:="true"]
    require: (&(osgi.wiring.bundle=org.knime.ext.svg)(&(bundle-version>=3.0.0)(!(bundle-version>=5.0.0))))
     |
    provide: osgi.wiring.bundle; bundle-version:Version="4.7.0.v202207050937"; osgi.wiring.bundle="org.knime.ext.svg"; singleton:="true"
  org.apache.batik.anim [osgi.identity; type="osgi.bundle"; version:Version="1.14.0.v20210324-0332"; osgi.identity="org.apache.batik.anim"]
    import: (&(osgi.wiring.package=org.apache.batik.dom)(&(version>=1.14.0)(!(version>=2.0.0))))
     |
    export: osgi.wiring.package=org.apache.batik.dom; uses:=org.w3c.dom.events
  org.apache.batik.dom [osgi.identity; type="osgi.bundle"; version:Version="1.14.0.v20210324-0332"; osgi.identity="org.apache.batik.dom"]
    import: (osgi.wiring.package=org.w3c.dom.events)
     |
    export: osgi.wiring.package: org.w3c.dom.events
  org.eclipse.osgi [osgi.identity; type="osgi.bundle"; version:Version="3.18.0.v20220516-2155"; osgi.identity="org.eclipse.osgi"; singleton:="true"]
RESOLVER: Finding capabilities for requirement
	osgi.wiring.package; filter:="(osgi.wiring.package=*)"; resolution:="dynamic"; cardinality:="multiple"
		of resource
			osgi.identity; type="osgi.bundle"; version:Version="1.2.2.v20201119-1642"; osgi.identity="javax.activation"
RESOLVER: Capabilities being returned to the resolver
 null wires!
org.apache.felix.resolver.reason.ReasonException: Unable to resolve osgi.identity; type="osgi.bundle"; version:Version="1.2.2.v20201119-1642"; osgi.identity="javax.activation": missing requirement osgi.wiring.package; filter:="(osgi.wiring.package=*)"; resolution:="dynamic"; cardinality:="multiple"
	at org.apache.felix.resolver.Candidates$MissingRequirementError.toException(Candidates.java:1340)
	at org.apache.felix.resolver.ResolverImpl.resolveDynamic(ResolverImpl.java:674)
	at org.eclipse.osgi.container.ModuleResolver$ResolveProcess.resolveDynamic(ModuleResolver.java:1320)
	at org.eclipse.osgi.container.ModuleResolver$ResolveProcess.resolve(ModuleResolver.java:891)
	at org.eclipse.osgi.container.ModuleResolver.resolveDynamicDelta(ModuleResolver.java:177)
	at org.eclipse.osgi.container.ModuleContainer.resolveDynamic(ModuleContainer.java:618)
	at org.eclipse.osgi.internal.loader.BundleLoader.findDynamicSource(BundleLoader.java:1216)
	at org.eclipse.osgi.internal.loader.BundleLoader.findResources(BundleLoader.java:785)
	at org.eclipse.osgi.internal.loader.ModuleClassLoader.getResources(ModuleClassLoader.java:240)
	at org.eclipse.osgi.internal.framework.ContextFinder.getResources(ContextFinder.java:182)
	at javax.activation.SecuritySupport$3.run(SecuritySupport.java:61)
	at java.base/java.security.AccessController.doPrivileged(Unknown Source)
	at javax.activation.SecuritySupport.getResources(SecuritySupport.java:56)
	at javax.activation.MimetypesFileTypeMap.loadAllResources(MimetypesFileTypeMap.java:182)
	at javax.activation.MimetypesFileTypeMap.<init>(MimetypesFileTypeMap.java:124)
	at javax.activation.MimetypesFileTypeMap.<init>(MimetypesFileTypeMap.java:271)
	at org.knime.core.internal.CorePlugin.readMimeTypes(CorePlugin.java:125)
	at org.knime.core.internal.CorePlugin.start(CorePlugin.java:116)
	at org.eclipse.osgi.internal.framework.BundleContextImpl$2.run(BundleContextImpl.java:818)
	at org.eclipse.osgi.internal.framework.BundleContextImpl$2.run(BundleContextImpl.java:1)
	at java.base/java.security.AccessController.doPrivileged(Unknown Source)
	at org.eclipse.osgi.internal.framework.BundleContextImpl.startActivator(BundleContextImpl.java:810)
	at org.eclipse.osgi.internal.framework.BundleContextImpl.start(BundleContextImpl.java:767)
	at org.eclipse.osgi.internal.framework.EquinoxBundle.startWorker0(EquinoxBundle.java:1032)
	at org.eclipse.osgi.internal.framework.EquinoxBundle$EquinoxModule.startWorker(EquinoxBundle.java:371)
	at org.eclipse.osgi.container.Module.doStart(Module.java:605)
	at org.eclipse.osgi.container.Module.start(Module.java:468)
	at org.eclipse.osgi.framework.util.SecureAction.start(SecureAction.java:513)
	at org.eclipse.osgi.internal.hooks.EclipseLazyStarter.postFindLocalClass(EclipseLazyStarter.java:117)
	at org.eclipse.osgi.internal.loader.classpath.ClasspathManager.findLocalClass(ClasspathManager.java:570)
	at org.eclipse.osgi.internal.loader.ModuleClassLoader.findLocalClass(ModuleClassLoader.java:335)
	at org.eclipse.osgi.internal.loader.BundleLoader.findLocalClass(BundleLoader.java:397)
	at org.eclipse.osgi.internal.loader.sources.SingleSourcePackage.loadClass(SingleSourcePackage.java:41)
	at org.eclipse.osgi.internal.loader.sources.MultiSourcePackage.loadClass(MultiSourcePackage.java:37)
	at org.eclipse.osgi.internal.loader.BundleLoader.findClass0(BundleLoader.java:496)
	at org.eclipse.osgi.internal.loader.BundleLoader.findClass(BundleLoader.java:416)
	at org.eclipse.osgi.internal.loader.ModuleClassLoader.loadClass(ModuleClassLoader.java:168)
	at java.base/java.lang.ClassLoader.loadClass(Unknown Source)
	at org.knime.product.rcp.KNIMEApplication.start(KNIMEApplication.java:120)
	at org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:203)
	at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:136)
	at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:104)
	at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:402)
	at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:255)
	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
	at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
	at java.base/java.lang.reflect.Method.invoke(Unknown Source)
	at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:659)
	at org.eclipse.equinox.launcher.Main.basicRun(Main.java:596)
	at org.eclipse.equinox.launcher.Main.run(Main.java:1467)
RESOLVER: Resolution report
javax.activation [180]
  Unresolved requirement: Import-Package: *; resolution:="dynamic"; cardinality:="multiple"

Best regards,
HaveF

Hi @HaveF,

You will need to uninstall the pasteur.pf2.ngs extension, it has been abandoned by its developers and is no longer compatible with 4.7.0.

best,
Gabriel

Get it. Thanks @gab1one

So, Bash is gone. What copy/move nodes to use instead?

Hi @izaychik63,

You can use the External Tool ā€“ KNIME Community Hub to run commands in a shell.
If you want to move files use Transfer Files ā€“ KNIME Community Hub

best,
Gabriel

3 Likes

Good morning @gab1one,

the bash node getting remove, rendering workflows unusable after update (worth to note that downgrading is quite a pain), causing quite some discomfort to be honest.

Especially because the External Tool ā€“ KNIME Community Hub node being poorly implemented as it:

  1. Lacks support for path variables
  2. Not all input fields are able to get dynamically populated via flow variables
  3. Paths canā€™t be manually specified i.e. to be relative to workflow data directory
  4. Switching of input types (data vs variables) is impossible
  5. Usage of the external tools required to generate (manually or via knime) a bash script and make it executable

Generally speaking, the external tool node profoundly blocks the dynamic usage of knime. The node usage feels rather restrictive and not well integrated.

I apologize for the rather blunt but only aim to provide a constructive as possible feedback. Especially as the node got removed without any advance warning time like being marked as deprecated first, then marked as to be removed with clear visual change and / or warning upfront.

@ipazin once mentioned that deprecated nodes are not causing much of a problem and simply stay there. Though, the sudden removal, form my perspective, reveals the necessity of a more well informed and managed deprecation / removal process to omit workflows breaking without warning.

Kind regards
Mike

1 Like

Adding to that, as I tried to automated creating a bash file via Knime it must be stated that the Set Files/Folders Permissions ā€“ KNIME Community Hub node continuously fails to set POSIX permissions.

That virtually makes it impossible to automate usage of external tools like a simple shell command. It sadly feels like a huge regression compared to the now gone bash node. Even, though, that was not properly but still somehow working before.

It just incurred to me that the Bash Node is a community extension belonging to KNIME NGS tools ā€“ KNIME Community Hub. So me previous statement is partially invalid.

What prevails, however, is the aspect around Knimes update procedure. It would be nice if, prior to an update, the workspace could be scanned for nodes which might become unavailable after update.

Also worth to note that the Selenium / Palladian Nodes from @qqilihq have a very nice update process to automatically replace the nodes which received an update.

1 Like

I wanted to provide a follow up since I noticed there a few other community members which got caught by surprise by the decommissioning of NGS Tools but also struggle with using the external tools to replace the bash nodes.

In the following post I did my very best to summarize the struggle about the external nodes

Since I believe how the decommissioning was carried out is a great opportunity to improve I hope this sheds some light on this process and itā€™s consequences.

Best
Mike

1 Like

This topic was automatically closed 90 days after the last reply. New replies are no longer allowed.