You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

自定义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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.11 19:34:52