Eclipse + Maven+Tycho 打包知识整理

环境:
Eclipse:2023-06(4.28.0)
Maven: 3.9.5
Tycho: 4.0.8
JRE: 17

需要创建下面几种工程


- org.test.root //父工程,用来统一配置tycho插件,以及要构建的模块
	| - org.test.feature //feature插件工程,可以有多个,打包出来后的featrue插件
		| - category.xml  //配置feature所关联的插件
		| - pom.xml       //配置父节点及featrue插件版本号、类型为eclipse-feature等
	| - org.test.bunle    //正常的plug-in插件,可以有多个(包括RCP application插件)
		| - pom.xml      //配置父节点及plugin插件版本号、类型为eclipse-plugin等
	| - org.test.target  //.target文件所在的插件,
		| - pom.xml      //配置父节点及target插件版本号、类型为eclipse-target-definition
		| - test.target  //用来配置tycho构建eclipse时所需要的所有的插件,包括 eclipse platform、p2、第三方jar等
	| - org.test.repository  //将所有插件打包成可执行的exe以及更新站点
		| - pom.xml          //配置父节点及repository插件版本号、类型为eclipse-repository
		| - test.product      //.product文件
	| - pom.xml //父工程节点配置,配置tycho 版本号以及需要构建的模块

上面工程各目录POM
org.test.root

<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/maven-v4_0_0.xsd">
	<modelVersion>4.0.0</modelVersion>

	<version>1.0.0-SNAPSHOT</version>
	<groupId>test.root</groupId>
	<artifactId>org.test.root</artifactId>
	<packaging>pom</packaging>
	<name>Root Project</name>

	<properties>
		<tycho-version>4.0.8</tycho-version>
		<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
	</properties>

	<modules>
		<module>org.test.target</module>
		<module>org.test.feature</module>
		<module>org.test.bundle</module>
		<module>org.test.repository</module>
	</modules>

	<build>
		<plugins>
			<plugin>
				<groupId>org.eclipse.tycho</groupId>
				<artifactId>target-platform-configuration</artifactId>
				<version>${tycho-version}</version>
				<configuration>
					<target>
						<artifact>
							<groupId>test.target</groupId>
							<artifactId>org.test.target</artifactId>
							<version>1.0.0.qualifier</version>
						</artifact>
					</target>
					<environments>
						<environment>
							<os>win32</os>
							<ws>win32</ws>
							<arch>x86_64</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>
			<plugin>
				<groupId>org.eclipse.tycho</groupId>
				<artifactId>tycho-maven-plugin</artifactId>
				<version>${tycho-version}</version>
				<extensions>true</extensions>
			</plugin>
			<plugin>
				<groupId>org.apache.maven.plugins</groupId>
				<artifactId>maven-compiler-plugin</artifactId>
				<version>3.11.0</version> <!-- 使用适合的版本 -->
				<configuration>
					<source>17</source>
					<target>17</target>
					<compilerArgs>
						<arg>-Xlint:-deprecation</arg> <!-- 忽略弃用警告 -->
					</compilerArgs>
					<compilerArgument>-Xlint:unchecked</compilerArgument>
				</configuration>
			</plugin>
		</plugins>
	</build>
</project>

org.test.featrue

<project>
	<parent>
		<artifactId>org.test.root</artifactId>
		<groupId>test.root</groupId>
		<version>1.0.0-SNAPSHOT</version>
	</parent>
	
	<artifactId>org.test.feature</artifactId>
	<packaging>eclipse-feature</packaging>
	<name>testfeatrue</name>
	<groupId>test.feature</groupId>
	<version>1.0.0-SNAPSHOT</version>
</project>

org.test.bundle

<project>
	<parent>
		<artifactId>org.test.root</artifactId>
		<groupId>test.root</groupId>
		<version>1.0.0-SNAPSHOT</version>
	</parent>
	
	<artifactId>org.test.bundle</artifactId>
	<packaging>eclipse-plugin</packaging>
	<name>testbundle</name>
	<groupId>test.bundle</groupId>
	<version>1.0.0-SNAPSHOT</version>
</project>

org.test.target

<project>
	<parent>
		<artifactId>org.test.root</artifactId>
		<groupId>test.root</groupId>
		<version>1.0.0-SNAPSHOT</version>
	</parent>
	
	<artifactId>org.test.bundle</artifactId>
	<packaging>eclipse-target-definition</packaging>
	<name>testbundle</name>
	<groupId>test.bundle</groupId>
	<version>1.0.0-SNAPSHOT</version>
</project>

org.test.repository

<project>
<modelVersion>4.0.0</modelVersion>

	<groupId>studio.repository</groupId>
	<artifactId>org.test.repository</artifactId>
	<packaging>eclipse-repository</packaging>
	<name>Studio Product</name>
	
	<parent>
		<version>1.0.0-SNAPSHOT</version>
		<groupId>test.root</groupId>
		<artifactId>org.test.root</artifactId>
	</parent>

	<build>
		<plugins>
			<plugin>
				<groupId>org.eclipse.tycho</groupId>
				<artifactId>tycho-p2-director-plugin</artifactId>
				<version>${tycho-version}</version>
				<configuration>
					<formats>
						<win32>zip</win32>
						<linux>tar.gz</linux>
						<macosx>tar.gz</macosx>
					</formats>
				</configuration>
				<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>
		</plugins>
	</build>
</project>

将上面的pom配置好后,在root下面的pom上右键 Run as... > mvn build
image
image
后面直接Run as...>mvn build 即可,不用每次mvn clean 然后mvn verify

注意事项:

  1. 开发环境如果要用.target中配置的jar,需要配置一下首选项,默认是选中Running Platform的,修改为
    image

  2. jdk11以上的版本javax的包可能不在jdk中了,需要单独引用,在.target文件中添加,且在需要引用的插件中导入此包的依赖
    image

  3. 一般报这个错 Missing requirement: org.test.bundle 1.0.0.qualifier requires 'osgi.bundle; org.eclipse.equinox.event 1.6.200' but it could not be found,说明.target文件中配置的包中不存这个插件,需要检查下是不是没有勾选

  4. 每个工程下面都要加个pom.xml 太繁锁,有个简单的方法,在最顶层的工程目录下创建一个.mvn文件夹,文件夹下面创建一个extensions.xml,xml中的内容如下:

<extensions>
	<extension>
		<groupId>org.eclipse.tycho</groupId>
		<artifactId>tycho-build</artifactId>
		<version>4.0.8</version>
	</extension>
</extensions>

这样其他子模块的maven工程就不用配置pom.xml了,执行mvn命令时会自动识别并使用配置中的tycho版本进行构建

注意:上面这个方法会额外在工程下生成一个.tychoxxx的文件。目前没有使用这样的配置,而是每个工程都添加pom.xml的方式

刚开始接触时走了不少弯路,摸索了一段时间以上方式应该可以满足打包了,后续的上线部署暂时还不涉及未研究

参考资料:
Tycho使用相关

使用Tycho构建OSGi插件项目_manifest.mf tycho-CSDN博客

Tycho:用Maven构建Eclipse Plugin项目 | 心内求法 (holbrook.github.io)

Maven Tycho for building Eclipse plug-ins, OSGi bundles and Eclipse applications with the command line - Tutorial (vogella.com)

Tycho 打包例程:

e4-tutorial/org.eclipse.e4.tutorial.contacts.build.tycho at master · toedter/e4-tutorial (github.com)

Tycho官网文档

Tycho p2 Director Plugin – tycho-p2-director:archive-products (eclipseprojects.io)

posted @ 2024-09-13 15:44  jason_bo  阅读(30)  评论(0编辑  收藏  举报