I have created an eclipse plugin, with the following Manifest file:
Manifest-Version: 1.0
Bundle-ManifestVersion: 2
Bundle-Name: Commitlinking
Bundle-SymbolicName: com.polarion.commitlinking;singleton:=true
Bundle-Version: 1.0.0.202101092309
Bundle-ClassPath: com.polarion.commitlinking_1.0.0.202101092309.jar
Bundle-Activator: com.polarion.commitlinking.Activator
Bundle-Vendor: POLARION
Require-Bundle: javax.inject,
org.eclipse.osgi,
org.eclipse.jface,
org.eclipse.e4.ui.model.workbench,
org.eclipse.e4.ui.di,
org.eclipse.e4.ui.services,
org.eclipse.e4.core.di.annotations,
org.eclipse.core.runtime,
org.eclipse.e4.core.di,
org.eclipse.e4.core.contexts;bundle-version="1.8.400",
org.eclipse.e4.ui.workbench,
org.eclipse.core.commands,
org.eclipse.ui.workbench,
org.eclipse.ui,
com.polarion.alm.ws.client
Bundle-RequiredExecutionEnvironment: JavaSE-15
Bundle-ActivationPolicy: lazy
Import-Package: javax.annotation;version="1.2.0",
javax.inject;version="1.0.0",
org.eclipse.core.expressions,
org.eclipse.core.runtime;version="3.5.0",
org.eclipse.e4.core.commands,
org.eclipse.e4.core.di.extensions;version="0.16.0",
org.eclipse.e4.core.services.events,
org.eclipse.e4.ui.dialogs,
org.eclipse.e4.ui.workbench.modeling,
org.eclipse.jface.text,
org.eclipse.ui,
org.eclipse.ui.commands,
org.eclipse.ui.menus,
org.eclipse.ui.plugin,
org.osgi.service.event;version="1.4.0"
Automatic-Module-Name: com.polarion.commitlinking
Unfortunately, including the relevant jars as external jars has not allowed me to create the plugin succesfully so I've tried instead (following the recommendation present on vogella) to export the target platform and create a parent pom and inside it place my plugin project and another project that uses the target platform to manage the dependencies:
The parent pom:
<?xml version="1.0" encoding="UTF-8"?>
<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.packtpub.e4</groupId>
<artifactId>com.packtpub.e4.parent</artifactId>
<version>1.0.0-SNAPSHOT</version>
<packaging>pom</packaging>
<properties>
<tycho.version>2.1.0</tycho.version>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<eclipse-repo.url>http://download.eclipse.org/releases/latest</eclipse-repo.url>
</properties>
<build>
<pluginManagement>
<plugins>
<plugin>
<groupId>org.eclipse.tycho</groupId>
<artifactId>tycho-p2-director-plugin</artifactId>
<version>${tycho.version}</version>
</plugin>
</plugins>
</pluginManagement>
<plugins>
<plugin>
<groupId>org.eclipse.tycho</groupId>
<artifactId>tycho-maven-plugin</artifactId>
<version>${tycho.version}</version>
<extensions>true</extensions>
</plugin>
<!--Enable the replacement of the SNAPSHOT version in the final product
configuration -->
<plugin>
<groupId>org.eclipse.tycho</groupId>
<artifactId>tycho-packaging-plugin</artifactId>
<version>${tycho.version}</version>
<executions>
<execution>
<phase>package</phase>
<id>package-feature</id>
<configuration>
<finalName>${project.artifactId}_${unqualifiedVersion}.${buildQualifier}</finalName>
</configuration>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.eclipse.tycho</groupId>
<artifactId>target-platform-configuration</artifactId>
<version>${tycho.version}</version>
<configuration>
<target>
<artifact>
<groupId>com.vogella.tycho</groupId>
<artifactId>target-platform</artifactId>
<version>1.0.0-SNAPSHOT</version>
</artifact>
</target>
<environments>
<environment>
<os>linux</os>
<ws>gtk</ws>
<arch>x86_64</arch>
</environment>
<environment>
<os>win32</os>
<ws>win32</ws>
<arch>x86_64</arch>
</environment>
<environment>
<os>macosx</os>
<ws>cocoa</ws>
<arch>x86_64</arch>
</environment>
</environments>
</configuration>
</plugin>
</plugins>
</build>
<modules>
<module>target-platform</module>
<module>com.polarion.commitlinking</module>
</modules>
The target platform project:
<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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>com.packtpub.e4</groupId>
<artifactId>com.packtpub.e4.parent</artifactId>
<version>1.0.0-SNAPSHOT</version>
</parent>
<groupId>com.vogella.tycho</groupId>
<artifactId>target-platform</artifactId>
<version>1.0.0-SNAPSHOT</version>
<packaging>eclipse-target-definition</packaging>
<name>target-platform</name>
</project>
The plugin pom is below:
<?xml version="1.0" encoding="UTF-8"?>
<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.polarion</groupId>
<artifactId>com.polarion.commitlinking</artifactId>
<version>1.0.0-SNAPSHOT</version>
<packaging>eclipse-plugin</packaging>
<parent>
<groupId>com.packtpub.e4</groupId>
<artifactId>com.packtpub.e4.parent</artifactId>
<version>1.0.0-SNAPSHOT</version>
</parent>
</project>
The target-platform.target file is as below:
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<?pde version="3.8"?>
<target name="Polarion plugin development">
<locations>
<location path="/home/bilal/eclipse/java-2020-092/eclipse/" type="Profile"/>
<location path="/opt/polarion/polarion/" type="Directory"/>
<location path="/home/bilal/Programs/eclipse-installer/plugins/" type="Directory"/>
</locations>
<environment>
<arch>x86_64</arch>
<os>linux</os>
<ws>gtk</ws>
<nl>en_US</nl>
</environment>
<launcherArgs>
<vmArgs>-Declipse.p2.max.threads=10 -Doomph.update.url=http://download.eclipse.org/oomph/updates/milestone/latest -Doomph.redirection.index.redirection=index:/->http://git.eclipse.org/c/oomph/org.eclipse.oomph.git/plain/setups/ -Dosgi.requiredJavaVersion=11 -Dosgi.instance.area.default=#user.home/eclipse-workspace -Dsun.java.command=Eclipse -XX:+UseG1GC -XX:+UseStringDeduplication --add-modules=ALL-SYSTEM -Dosgi.requiredJavaVersion=11 -Dosgi.dataAreaRequiresExplicitInit=true -Xms256m -Xmx2048m --add-modules=ALL-SYSTEM</vmArgs>
</launcherArgs>
<includeBundles>
<plugin id="ch.qos.logback.classic"/>
.....
However, when I run mvn clean package I get the following exception:
Internal error: org.eclipse.tycho.repository.local.MirroringArtifactProvider$MirroringFailedException: Could not mirror artifact osgi.bundle,org.apache.log4j,1.2.17.2019-11-22 into the local Maven repository.See log output for details. /opt/polarion/polarion/plugins/org.apache.log4j_1.2.17.2019-11-22 (Is a directory)
This is because one of the dependencies i.e. org.apache.log4j_1.2.17.2019-11-22 is actually a ddirectory with a log4j-lib plugin inside. This works fine when running the project in the IDE but I can't figure out how to resolve this correctly. Any help would be appreciated!
So the actual solution was to create a new plugin using existing jar archives option. Add that plugin as a dependency to my plugin and add that to the parent pom.xml in the modules section. Required some tinkering with dependencies but adding the resulting built jar files to the dropins folder seemed to have worked for now.
On my PDE/Tycho Eclipse environment I want to build a plugin of type eclipse-repository which contains 3 features each one for a specific platform.
The eclipse-repository plugin reads all its configuration from a parent plugin which content is the following:
<properties>
<tycho.version>0.26.0</tycho.version>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<repositories>
<repository>
<id>neon</id>
<layout>p2</layout>
<url>http://download.eclipse.org/releases/neon/</url>
</repository>
</repositories>
<build>
<plugins>
<plugin>
<groupId>org.eclipse.tycho</groupId>
<artifactId>tycho-maven-plugin</artifactId>
<version>${tycho.version}</version>
<extensions>true</extensions>
</plugin>
<plugin>
<groupId>org.eclipse.tycho</groupId>
<artifactId>target-platform-configuration</artifactId>
<version>${tycho.version}</version>
<configuration>
<environments>
<environment>
<os>win32</os>
<ws>win32</ws>
<arch>x86</arch>
</environment>
<environment>
<os>linux</os>
<ws>gtk</ws>
<arch>x86_64</arch>
</environment>
<environment>
<os>macosx</os>
<ws>cocoa</ws>
<arch>x86_64</arch>
</environment>
</environments>
</configuration>
</plugin>
</plugins>
</build>
When I try to build the eclpse-repository project I get an error:
[ERROR] Failed to execute goal org.eclipse.tycho:tycho-p2-repository-plugin:0.26.0:assemble-repository (default-assemble-repository) on project ... : Execution default-assemble-repository of goal org.eclipse.tycho:tycho-p2-repository-plugin:0.26.0:assemble-repository failed: Cannot resolve dependencies of MavenProject ...
Unresolveable build extension: Plugin org.eclipse.tycho:tycho-maven-plugin:0.26.0 or one of its dependencies could not be resolved: Failed to read artifact descriptor for org.eclipse.tycho:tycho-maven-plugin:jar:0.26.0
below is my pom.xml file
http://maven.apache.org/xsd/maven-4.0.0.xsd">
4.0.0
com.in2soft.otx.checker
com.kpit.otx.checker.build
1.0.0-SNAPSHOT
<properties>
<tycho-version>0.26.0</tycho-version>
</properties>
<repositories>
<repository>
<id>Mars</id>
<layout>p2</layout>
<url>http://download.eclipse.org/releases/mars</url>
</repository>
</repositories>
<build>
<plugins>
<plugin>
<groupId>org.eclipse.tycho</groupId>
<artifactId>tycho-maven-plugin</artifactId>
<configuration>
<pomDependencies>consider</pomDependencies>
</configuration>
<version>${tycho-version}</version>
<extensions>true</extensions>
</plugin>
<plugin>
<groupId>org.eclipse.tycho</groupId>
<artifactId>target-platform-configuration</artifactId>
<configuration>
<environments>
<environment>
<os>${os}</os>
<ws>${ws}</ws>
<arch>${arch}</arch>
</environment>
</environments>
<target>
<artifact>
<groupId>com.in2soft.otx.checker</groupId>
<artifactId>rcp</artifactId>
<version>1.0.0-SNAPSHOT</version>
<classifier>rcp</classifier>
</artifact>
</target>
</configuration>
</plugin>
</plugins>
</build>
I want to install eclipse plug-in that was build with help of Tycho.
When I call mvn clean install Maven exits with SUCCESS, and in target directory there is .jar file.
I can't make Eclipse to work with this .jar, it says that file could not be found.
Am I missing something here? How to use my tycho built plug-in?
Here is my pom.xml:
<?xml version="1.0" encoding="UTF-8"?>
<project
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"
xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<modelVersion>4.0.0</modelVersion>
<groupId>com.my.example</groupId>
<artifactId>com.my.example.ExampleProject</artifactId>
<version>1.0.0-SNAPSHOT</version>
<packaging>eclipse-plugin</packaging>
<repositories>
<repository>
<id>eclipse-luna</id>
<layout>p2</layout>
<url>http://download.eclipse.org/releases/luna</url>
</repository>
</repositories>
<build>
<plugins>
<plugin>
<groupId>org.eclipse.tycho</groupId>
<artifactId>tycho-maven-plugin</artifactId>
<version>0.22.0</version>
<extensions>true</extensions>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-source-plugin</artifactId>
<executions>
<execution>
<goals>
<goal>jar</goal>
</goals>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.eclipse.tycho</groupId>
<artifactId>target-platform-configuration</artifactId>
<version>0.22.0</version>
<configuration>
<environments>
<environment>
<os>win32</os>
<ws>win32</ws>
<arch>x86</arch>
</environment>
<environment>
<os>linux</os>
<ws>gtk</ws>
<arch>x86_64</arch>
</environment>
<environment>
<os>macosx</os>
<ws>cocoa</ws>
<arch>x86_64</arch>
</environment>
</environments>
</configuration>
</plugin>
</plugins>
</build>
I have a cross-platform Tycho build running on Mac OS X that produces Windows, Mac and a p2 repo outputs.
Generally all is fine except that the Windows RCP does NOT get configured with the update repo URL details from my p2.inf addRepository instructions (and so p2 update fails) - it DOES for the Mac OS X app... which seems suspicious... why one and not the other?!
Is this a Tycho bug anyone might've come across? (I'm currently using Tycho 0.13.0, nervous about switching versions..) Or do I need explicit instructions for this to get applied to the Windows build?
It'll probably help to include some POMs here...
Here's the POM from the product project:
<?xml version="1.0" encoding="UTF-8"?>
<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>
<artifactId>com.myapp.main.product</artifactId>
<packaging>eclipse-repository</packaging>
<name>my product</name>
<parent>
<groupId>com.myapp</groupId>
<artifactId>parent</artifactId>
<version>1.9.0-SNAPSHOT</version>
<relativePath>../com.myapp.parent</relativePath>
</parent>
<build>
<plugins>
<plugin>
<groupId>org.eclipse.tycho</groupId>
<artifactId>tycho-p2-director-plugin</artifactId>
<version>${tycho-version}</version>
<executions>
<execution>
<id>materialize-products</id>
<goals>
<goal>materialize-products</goal>
</goals>
</execution>
<execution>
<id>archive-products</id>
<goals>
<goal>archive-products</goal>
</goals>
</execution>
</executions>
</plugin>
<!-- SEE: http://dev.eclipse.org/mhonarc/lists/tycho-user/msg00362.html
SEE: https://issues.sonatype.org/browse/TYCHO-300 -->
<plugin>
<artifactId>maven-resources-plugin</artifactId>
<version>2.5</version>
<executions>
<execution>
<id>copy-resources</id>
<phase>generate-resources</phase>
<goals>
<goal>copy-resources</goal>
</goals>
<configuration>
<outputDirectory>${project.build.directory}/products/com.myapp.main.product/icons</outputDirectory>
<resources>
<resource>
<directory>icons</directory>
</resource>
</resources>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
<version>1.9.0-SNAPSHOT</version>
</project>
And the parent POM:
<?xml version="1.0" encoding="UTF-8"?>
<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.myapp</groupId>
<artifactId>parent</artifactId>
<version>1.9.0-SNAPSHOT</version>
<packaging>pom</packaging>
<modules>
<module>../com.myapp.doc</module>
<module>../com.myapp.lots.of.plugins</module>
<module>../com.myapp.main</module>
<module>../com.myapp.main.nl</module>
<module>../com.myapp.branding</module>
<module>../com.myapp.branding.nl</module>
<module>../com.myapp.feature.platform</module>
<module>../com.myapp.feature.core</module>
<module>../com.myapp.main.product</module>
</modules>
<properties>
<tycho-version>0.13.0</tycho-version>
</properties>
<build>
<plugins>
<plugin>
<groupId>org.eclipse.tycho</groupId>
<artifactId>tycho-maven-plugin</artifactId>
<version>${tycho-version}</version>
<extensions>true</extensions>
</plugin>
<plugin>
<groupId>org.eclipse.tycho</groupId>
<artifactId>target-platform-configuration</artifactId>
<version>${tycho-version}</version>
<configuration>
<resolver>p2</resolver>
<environments>
<environment>
<os>win32</os>
<ws>win32</ws>
<arch>x86</arch>
</environment>
<environment>
<os>macosx</os>
<ws>cocoa</ws>
<arch>x86</arch>
</environment>
<environment>
<os>macosx</os>
<ws>carbon</ws>
<arch>x86</arch>
</environment>
<!-- 64 bit platforms
<environment>
<os>win32</os>
<ws>win32</ws>
<arch>x86_64</arch>
</environment>
-->
<environment>
<os>macosx</os>
<ws>cocoa</ws>
<arch>x86_64</arch>
</environment>
</environments>
</configuration>
</plugin>
</plugins>
</build>
<profiles>
<!-- MacOS specific vm arguments for UI testing -->
<profile>
<id>osx</id>
<activation>
<property>
<name>java.vendor.url</name>
<value>http://www.apple.com/</value>
</property>
</activation>
<build>
<pluginManagement>
<plugins>
<plugin>
<groupId>org.eclipse.tycho</groupId>
<artifactId>tycho-surefire-plugin</artifactId>
<version>${tycho-version}</version>
<configuration>
<appArgLine>-XstartOnFirstThread</appArgLine>
</configuration>
</plugin>
</plugins>
</pluginManagement>
</build>
</profile>
<profile>
<id>coverage</id>
<activation>
<property>
<name>coverage</name>
</property>
</activation>
<properties>
<emma.session.out.file>${project.build.directory}/emma/${project.artifactId}.es</emma.session.out.file>
<emma.filter>com.myapp.*</emma.filter>
<eclemma.instrument.bundles>com.myapp.backup.tests,com.myapp.common.tests,com.myapp.model.tests</eclemma.instrument.bundles>
</properties>
<build>
<plugins>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>build-helper-maven-plugin</artifactId>
<version>1.5</version>
<executions>
<execution>
<id>attach-artifacts</id>
<phase>package</phase>
<goals>
<goal>attach-artifact</goal>
</goals>
<configuration>
<artifacts>
<artifact>
<file>${emma.session.out.file}</file>
<type>es</type>
</artifact>
</artifacts>
</configuration>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.sonatype.tycho</groupId>
<artifactId>maven-osgi-test-plugin</artifactId>
<version>${tycho-version}</version>
<!--
<configuration>
<systemProperties combine.children="append">
<eclemma.help>true</eclemma.help>
<emma.session.out.file>${emma.session.out.file}</emma.session.out.file>
<emma.filter>${emma.filter}</emma.filter>
<eclemma.instrument.bundles>${eclemma.instrument.bundles}</eclemma.instrument.bundles>
</systemProperties>
<frameworkExtensions>
<frameworkExtension>
<groupId>org.eclemma.runtime.equinox</groupId>
<artifactId>org.eclemma.runtime.equinox</artifactId>
<version>1.1.0.200908261008</version>
</frameworkExtension>
</frameworkExtensions>
</configuration>
-->
<configuration>
<skip>${skipFunctional}</skip>
<useUIHarness>true</useUIHarness>
<useUIThread>false</useUIThread>
<product>org.eclipse.sdk.ide</product>
<application>org.eclipse.ui.ide.workbench</application>
<argLine>-Xmx512M</argLine>
<systemProperties combine.children="append">
<emma.session.out.file>${emma.session.out.file}</emma.session.out.file>
<emma.filter>${emma.filter}</emma.filter>
<eclemma.instrument.bundles>${emma.instrument.bundles}</eclemma.instrument.bundles>
</systemProperties>
<frameworkExtensions>
<frameworkExtension>
<groupId>org.eclemma.runtime.equinox</groupId>
<artifactId>org.eclemma.runtime.equinox</artifactId>
<version>1.1.0.200908261008</version>
</frameworkExtension>
</frameworkExtensions>
<application>org.eclipse.ui.ide.workbench</application>
<dependencies>
<dependency>
<type>p2-installable-unit</type>
<artifactId>org.eclipse.sdk.ide</artifactId>
<version>0.0.0</version>
</dependency>
</dependencies>
</configuration>
</plugin>
</plugins>
</build>
</profile>
</profiles>
<repositories>
<repository>
<id>helios-platform</id>
<layout>p2</layout>
<url>${project.baseUri}../../../../targetplatform/org.eclipse.platform-3.7.1</url>
</repository>
<repository>
<id>myapp-targetplatform</id>
<layout>p2</layout>
<url>${project.baseUri}../../../../targetplatform/myapp-targetplatform</url>
</repository>
</repositories>
</project>
Upgraded Tycho to 0.17.0 but it turns out the issue indeed has nothing to do with Tycho - I realized I've tweaked the location properties on Windows in an attempt to prepare to support installation into c:\Program Files post-XP with UAC:
-Dosgi.instance.area=#user.home/Application Data/myapp
-Dosgi.configuration.area=#user.home/Application Data/myapp/.configuration
However moving the osgi.configuration.area out of the installation folder (which defaults to c:\myapp :P) is what causes my p2 problem.