自定义BuildTimestampProvider在Tycho 4.0.10失效,求适配方案
Tycho 4.0.10适配自定义BuildTimestampProvider的修改方案
问题背景
在基于OSGi的应用中实现了自定义BuildTimestampProvider,用于仅为实际变更的bundle更新.qualifier时间戳(而非全量更新)。该实现与配置在Tycho 2.7.5中正常运行,但升级到Tycho 4.0.10后失效。
原自定义实现(含笔误+旧API)
@Component(role = BuildTimestampProvider.class, hint = "file") public class FileBuildTimestampProvider implementes BuildTimestampProvider { // 拼写错误:Ovverride → Override public Date getTimestamp(MavenSession session, MavenProject project, MojoExecution execution){ // 自定义逻辑 } }
原pom.xml配置(含拼写错误)
<plugin> <groupId>org.eclipse.tycho</groupId> <artifactId>tycho-packaging-plugin</artifactId> <version>2.7.5</version> <!-- 拼写错误:depedencies → dependencies --> <depedencies> <!-- 拼写错误:dependecy → dependency --> <dependecy> <groupId>com.team.osapp</groupId> <artifactId>buildtimstamp</artifactId> <version>0.0.1</version> </dependecy> </depedencies> <configuration> <!-- 拼写错误:deployableFeatuer → deployableFeature --> <deployableFeature>true</deployableFeatuer> <timestampProvider>file</timestampProvider> <file.timestamps>/home/timestamps.properties</file.timestamps> </configuration> <depedencies> </plugin>
适配Tycho 4.0.10的修改点
1. 修正代码实现的API兼容
Tycho 4.x对BuildTimestampProvider接口做了核心变更,需调整实现类:
- 返回类型变更:原
Date改为ZonedDateTime(Tycho 4.0+统一使用Java 8+的日期时间API) - 注解适配:使用符合OSGi Declarative Services 1.4+的注解格式,将原
hint改为property声明类型 - 修正代码笔误:
implementes改为implements,添加正确的@Override注解
修改后的实现类示例:
import org.eclipse.tycho.BuildTimestampProvider; import org.osgi.service.component.annotations.Component; import org.apache.maven.execution.MavenSession; import org.apache.maven.project.MavenProject; import org.apache.maven.plugin.MojoExecution; import java.time.ZonedDateTime; @Component(role = BuildTimestampProvider.class, property = "type=file") public class FileBuildTimestampProvider implements BuildTimestampProvider { @Override public ZonedDateTime getTimestamp(MavenSession session, MavenProject project, MojoExecution execution) { // 自定义逻辑:根据文件变更判断是否返回新时间戳 ZonedDateTime timestamp = /* 你的自定义时间戳逻辑 */; return timestamp; } }
2. 修正pom.xml配置错误与版本适配
- 修正拼写错误:将所有
depedencies改为dependencies,dependecy改为dependency,deployableFeatuer改为deployableFeature - 升级插件版本:将
tycho-packaging-plugin版本改为4.0.10 - 确保依赖匹配:自定义provider的
type属性需与配置中<timestampProvider>file</timestampProvider>一致
修改后的pom.xml配置示例:
<plugin> <groupId>org.eclipse.tycho</groupId> <artifactId>tycho-packaging-plugin</artifactId> <version>4.0.10</version> <dependencies> <dependency> <groupId>com.team.osapp</groupId> <artifactId>buildtimstamp</artifactId> <version>0.0.1</version> </dependency> </dependencies> <configuration> <deployableFeature>true</deployableFeature> <timestampProvider>file</timestampProvider> <file.timestamps>/home/timestamps.properties</file.timestamps> </configuration> </plugin>
3. 依赖环境适配
- Java版本要求:Tycho 4.x要求Java 11+,需确保项目编译与运行环境符合要求
- OSGi注解依赖:若使用DS注解,需确保
org.osgi.service.component.annotations依赖版本≥1.4.0,可在自定义provider的pom中添加:
<dependency> <groupId>org.osgi</groupId> <artifactId>org.osgi.service.component.annotations</artifactId> <version>1.4.0</version> <scope>provided</scope> </dependency>
4. 自定义逻辑兼容性调整
- 将原逻辑中基于
Date的时间处理改为ZonedDateTime,注意时区一致性(Tycho默认使用UTC时区) - 检查
file.timestamps文件的读写权限,Tycho 4.x对文件访问的权限检查更严格,需确保构建进程有该文件的读写权限
内容的提问来源于stack exchange,提问作者user001
相关产品推荐
相关产品推荐

