带有描述符的生命周期方法的非注释参数

Non annotation argument to lifecycle method with descriptor

我正在向现有的 OSGI 7 项目添加 Maven 构建功能。它在 Eclipse 中使用 bnd 和 Gradle 构建得很好。但是在使用 Maven 构建时出现以下错误:

[ERROR] /Users/randy/projects/xyz/src/com.xyz.masterdata/com.xyz.masterdata.core.logic.provider/bnd.bnd [0:0]: Non annotation argument to lifecycle method with descriptor (Lorg/osgi/service/transaction/control/TransactionControl;Lorg/osgi/service/transaction/control/jdbc/JDBCConnectionProvider;)V,  type org/osgi/service/transaction/control/TransactionControl
[ERROR] /Users/randy/projects/xyz/src/com.xyz.masterdata/com.xyz.masterdata.core.logic.provider/bnd.bnd [0:0]: Non annotation argument to lifecycle method with descriptor (Lorg/osgi/service/transaction/control/TransactionControl;Lorg/osgi/service/transaction/control/jdbc/JDBCConnectionProvider;)V,  type org/osgi/service/transaction/control/jdbc/JDBCConnectionProvider

违规代码如下,具体是带有@Activate注解的构造方法:

@Component(property = {
                "provider.target=(databaseName=MasterData)"
        })
public class ConsumerChannelDaoImpl implements ConsumerChannelDao
{
    private final TransactionControl _transactionControl;
    private Connection _connection;

    @Activate
    public ConsumerChannelDaoImpl(@Reference TransactionControl txControl, @Reference(name = "provider") JDBCConnectionProvider provider)
    {
        _transactionControl = txControl;
        _connection = provider.getResource(txControl);
    }

我的 pom.xml 具有以下依赖项:

<dependencies>
    <dependency>
        <groupId>org.osgi</groupId>
        <artifactId>osgi.annotation</artifactId>
        <version>7.0.0</version>
        <scope>provided</scope>
    </dependency>
    <dependency>
        <groupId>org.osgi</groupId>
        <artifactId>osgi.core</artifactId>
        <version>7.0.0</version>
        <scope>provided</scope>
    </dependency>
    <dependency>
        <groupId>org.osgi</groupId>
        <artifactId>osgi.cmpn</artifactId>
        <version>7.0.0</version>
        <scope>provided</scope>
    </dependency>
    <dependency>
        <groupId>org.osgi</groupId>
        <artifactId>org.osgi.service.http.whiteboard</artifactId>
        <version>1.1.0</version>
        <scope>provided</scope>
    </dependency>
    <dependency>
        <groupId>org.osgi</groupId>
        <artifactId>org.osgi.service.jaxrs</artifactId>
        <version>1.0.0</version>
    </dependency>
    <dependency>
        <groupId>org.osgi</groupId>
        <artifactId>org.osgi.service.jdbc</artifactId>
        <version>1.0.0</version>
        <scope>provided</scope>
    </dependency>
    ....
</dependencies>

我不知道是什么导致了这个问题。对使用 Maven 构建 OSGi 7 项目时如何解决的一些想法表示赞赏。

谢谢, 兰迪

BJ Hargrave 指出我使用的是旧版本的 bnd-maven-plugin。更新到 v4.3.1 就成功了。

        <plugin>
            <groupId>biz.aQute.bnd</groupId>
            <artifactId>bnd-maven-plugin</artifactId>
            <version>4.3.1</version>
            <executions>
                <execution>
                    <id>default-bnd-process</id>
                    <goals>
                        <goal>bnd-process</goal>
                    </goals>
                </execution>
            </executions>
        </plugin>