Add two plugins of same version - eclipse-plugin

How to add two plugins of same name with different version in eclipse product file?
For example - lua editor plugins has a plugin named com.naef.jnlua which has two versions 0.9.1 and 1.0.3 both the versions are needed to be added.
I am developing an eclipse plugin product and I want to add both the plugins to my .product file but my file is considering only the latest version of the plugin com.naef.jnlua.
Note: Eclipse IDE is accepting both versions.
Help me to solve the issue.

I use Eclipse Photon and could observe the following:
In the product editor, the "validate..." button might indicate a problem for each plugin with at least 2 versions in the current target that is referenced by the product.
e.g. Missing constraint: Require-Bundle: org.apache.batik.css; bundle-version="[1.6.0,1.7.0)"
BUT this does not prevent from exporting the product! This is just misleading and it took me hours to understand this.
I managed to include 2 versions of some plugins of the org.apache.batik framework in one product
In the product I had only one line, it specified the version that was not found during a previous build (try without version first, it worked also for me sometimes)
<plugin id="org.apache.batik.css" version="1.6.0.v201011041432"/>
I found as expected the 2 jars in the generated p2 repository\plugins folder created by the product export wizard:
org.apache.batik.css_1.6.0.v201011041432.jar
org.apache.batik.css_1.9.1.v20180313-1559.jar

Related

Adding different versions of same plugin in Feature file

While trying to generate build we get some plugin dependencies. When trying to add them in .product file, It shows plugin version as 0.0.0 by default. We have a situation to add more than one version of same plugins.
We tried to manually change 0.0.0 to the required version from the dependencies. We are successfully able to launch the application. But while trying to generate a build we get some errors.We have the required plugins installed.
If anyone knows how to add different versions, the help is much appreciated.
Edit:
Image showing the problem
This is the problem we are facing
The solution we tried
We tried manually changing version number but creates error during build generation
I'm not sure that this scenario is supported by PDE Build, because it sounds exotic a bit.
You can try to use different features to introduce different version of bundle.
But I think that more promissing strategy will be to "align" your dependencies, i.e. in your case it is better to select the version of GMF that uses the right Batik version.
Otherwise sooner or later you will get "blocking" bundle with singleton:true in your dependency tree, as #greg-449 mentioned.
Also, please have a look at this question: Tycho | How to build multiple version of same plugin using tycho
See my answer there:
https://stackoverflow.com/a/62426443/9062163
In fact the details I mentioned in my other answer where the result of a successful integration of Sirius 6.0.1 in an Eclipse RCP based on Photon. The troubles came from the integration of Batik 1.7 and 1.6 in the same product, the latter version being forced by the GMF version I use. I also needed some batik plugins of versions 1.8.0 and 1.9.1 for other reasons.

Plugin Compatibility Issue Eclipse Oxygen (4.7) and Java 9

We upgraded one of our Eclipse 3.x plugins to work with Java 9.
But when we generated the plugin update site content, and used Eclipse Update functionality to install the new version of the plugin, we encountered the following error in Eclipse Oxygen.
Removing part descriptor with the 'pluginxxx.bla.bla' id and the 'bla bla' description. Points to the invalid 'bundleclass://org.eclipse.ui.workbench/org.eclipse.ui.internal.e4.compatibility.CompatibilityView' class.
This error also appears due to some of the bundled plugins of Eclipse Oxygen itself.
After a hard week we had to
Uninstall our plugin
Remove the older versions of the plugin from the Eclipse/plugins folder
Export the plugin as a deployable plugin under the eclipse plugins directory. (Eclipse/plugins/blabla.jar)
Restart Eclipse and it worked.
Right click the eclipse plugin project and Run as "Eclipse Application" works fine, but installing the plugin from an "Update Site" causes the plugin to fail loading.
We could not find a solution yet, but it certainly effects our delivery of the plugin. The plugin is used by almost 500 CS students on their personal computers, and 200 lab computers. So the update should be installed using regular Eclipse Update functionality, not by copying the jar into the plugins directory.
Was there a better way to fix this, or something quicker we could've tried (in case this happens again)?
Update (7 days into the problem)
We have a workaround:
Export the feature project with the following settings in the Export Wizard
Destination/ Directory: Folder of your Plugin Update Site project
Options/ Package as individual JAR archieves (selected)
Options/ Generate p2 repository (selected)
Options/ Allow for binary cycles in target platform (selected)
Options/ Use class files compiled in the workspace (essentially selected)
Install (or update) the plugin from the local (or remote) plugin update site, and the CompatibilityView problem is solved.
In order to have the category listing displayed correctly during install/update new software operations, we added a category.xml file (File/New/Other/Plugin-in Development/Category Definition) in the update site project, defined the categories, and added the feature (versioned as "qualifier").
This is certainly not the way it should be, and we just hope it will be solved in the future Eclipse releases.
By the way current Eclipse Photon integration version has the same problem unfortunately.

Can't find C/C++ IntelliJ IDEA Plugin

I'm trying to add a c/c++ plugin to IntelliJ IDEA, so I went to plugins and searched for it but couldn't find it.
Did they remove it and replace it with their new IDE cLion? Is it no longer supported or what?
Looks like the version of your IntelliJ IDEA is newer than what the C/C++ plugin supports. If you look at the plugin page you can see that builds from 139.1 until 142 are compatible. And if you look here you can see that build 141 is IntelliJ 14.1 and IntelliJ IDEA 15 is numbered 143. So my guess is you are using IntelliJ IDEA 15 or 16 EAP and therefore the plugin is not shown when you search for it.
Simply download the cpp plugin of the old 14 version located here:
https://plugins.jetbrains.com/plugin/1373-c-c-
Then edit the file CppTools/META-INF/plugin.xml and replace the "until-build" value in line 5 to something like until-build="170.0"
And this works perfectly :)
One should really note that the "C/C++" plugin available in the IntelliJ Plugin Repository is actually not developed by Jetbrains, but by a third party called AdvancedTools, and has long not been updated. I'm not sure if that is related to the release of CLion, e.g. IntelliJ bought out the plugin to serve as the foundation of CLion or whatnot.
As listed in the CLion FAQ page, there is currently no official standalone plugin for C/C++ editing available for IntelliJ IDEA. Just as with some other products such as Jetbrains AppCode, Jetbrains are currently keeping CLion as an exclusively paid product, without a free community edition, as indicated in this forum post.
The post also confirmed that a plugin for IntelliJ IDEA might be coming in the future, but is currently (Jan 2018) not a priority for JetBrains.
So yeah for now the only way to get decent C/C++ support within the IntelliJ ecosystem is to use/buy JetBrains CLion.
Download latest version of c/c++ extension from link: https://plugins.jetbrains.com/plugin/1373-c-c-
then open that CppTools.zip inside META-INF folder open file plugin.xml modify line five until-build="" from your own intellij idea build. Go to Help --> About in Your Intellij idea.
plugin.xml file screenshot:
Now Go to File --> Settings --> Plugins --> Install plugins from Disk, browse ypur edited/ modified CppTools.zip.
I faced this problem before and i figure out that the software i install it was old and not update, so try to see the plugin version and see is that plugin version compatible with your intellij-idea, if not check update for the intelli-idea ,the developers fix many problems in every update ,then download it.
you can check compatibility from this page.
Here
Click on Preferences -> Plugins -> Browse Repositories and search for it

How do I get a plugin with platform specific code to deploy to the correct platform using an eclipse p2 repository?

I have an Eclipse Feature that I'm building that contains a few plugins. One of the plugins uses the import package statement to declare a dependency on another plugin.
The other plugin has platform specific code and exists in another feature that I'm building. I have two plugins in this feature that have the platform specific code. One for os=win32 arch=x86 and the other for os=win32 arch=x86_64
Both features are being built and using Tycho and they both have p2 repositories that are successfully available.
So, I made a composite repository that points to both of these repositories, and then I use the "Install New Software..." command in my RCP app and point to the composite repository to install the first feature I mentioned.
The issue is that when the installation is done, the plugin that has the platform specific code has failed to install correctly. Specifically, the plugin for the x86 system shows up on my 64bit machine.
In your feature.xml, choose the plugin with platform specific code and add a platform filter. the filters are available on the right side (once you select the plugin). You can choose filters such as:
OS
WS
Language
Architecture
When your feature is published, p2 will generate the appropriate filters.
I found the answer.
I needed a p2.inf file sitting next to my feature.xml file in the first feature I mentioned in the question.
And in that p2.inf file, I needed this text...
requires.1.namespace=org.eclipse.equinox.p2.iu
requires.1.name=com.myplatform.specfic.bundle.win32.x86
requires.1.filter=(&(osgi.os=win32) (osgi.arch=x86))
requires.1.namespace=org.eclipse.equinox.p2.iu
requires.1.name=com.myplatform.specfic.bundle.win32.x86_64
requires.1.filter=(&(osgi.os=win32) (osgi.arch=x86_64))
I added this file to the build.properties as well to make sure it was included in the deployed feature
Then when I deployed the p2 repository and performed the install into my RCP application, the correct plugin was placed onto my 64 bit machine.
UPDATE: I was wrong here. This is NOT the correct answer. The incorrect plugin still gets installed on some machines.

How best to maintain an Eclipse RCP plugin target?

I have a plugin for an RCP app that uses BIRT. I have a target for building my app which contains only the plugins/features that are required. I recently updated the BIRT plugin versions in my IDE, which created an incompatibility in the design files with previous versions of BIRT. I have the old version of BIRT in my target and need to update to the newer plugins.
In the past I have manually updated plugin jars in the target, but BIRT is a complicated platform with dependencies out the wazoo. Is there any utility or way of organizing my target differently that will make this easier to control in the future?
I would recommend to keep all components separately and not copy them into a single folder. You can use Target Definition editor (see File / New / Other... / Target Definition). So, after downloading all the pieces, you can unpack them locally and assemble your Target Platform using Target Definition editor.
You can also do the same using Window / Preferences / Plugin Development / Target Platform preference page. There you can select previously created target definition or specify base Eclipse install and then use "Add..." button to add additional components from local folders or remote sites.
Also, as far as I know the PDE team is currently working on expanding Target platform support in Eclipse 3.5. I think they are planning to allow to select Target Definition per-launch configuration and per-project.
Im not sure if i understand you right, so please let me know if not.
When i use third party libraries, i create a plugin for every single one.
Example:
xstream library:
Import the jars (also the source code)
Add the jars to the MANIFEST
Bundle-ClassPath
Add all xtream packages to the
MANIFEST Export-Package
When a plugin needs the code of the xstream library it has to depend on the xtream plugin. Because the packages are public, every plugin can use the source code of it.
When a new version of xtream is comming, you only have to update the jars and not the dependend plugins. Sometimes you have to update the export packages of the third party plugin.
All depended plugins you dont have to change.