【问题标题】:Import cannot be resolved by test plugin fragment using Tycho but works in Eclipse导入无法通过使用 Tycho 的测试插件片段解决,但在 Eclipse 中有效
【发布时间】:2017-03-24 16:47:59
【问题描述】:

我有一个插件项目,我正在尝试为其创建一个测试插件。我的插件项目中的包可用于我工作区中的其他插件,包括测试插件,但是当我尝试使用 tycho 构建我的项目时,测试插件会抛出一个错误,指出无法解析导入。

[ERROR] Failed to execute goal org.eclipse.tycho:tycho-compiler-plugin:0.25.0:compile (default-compile) on project REDACTED.tests: Compilation failure: Compilation failure:
[ERROR] REDACTED/PlanImportTest.java:[7]
[ERROR] import REDACTED.pluginname.Argument;
[ERROR] ^^^^^^^^^^^^
[ERROR] The import REDACTED.pluginname cannot be resolved

我是第谷的新手,所以我认为我的项目布局可能存在问题,但我无法在网上找到解决问题的方法。有谁知道为什么此导入在 Eclipse 中有效,但在命令行上运行 maven/tycho 构建时无效?相关文件如下。

插件清单:

Manifest-Version: 1.0
Bundle-ManifestVersion: 2
Bundle-Name: REDACTED.pluginname
Bundle-SymbolicName: REDACTED.pluginname;singleton:=true
Bundle-Version: 1.0.0.qualifier
Export-Package: REDACTED
Bundle-RequiredExecutionEnvironment: JavaSE-1.8
Eclipse-BuddyPolicy: registered
Eclipse-RegisterBuddy: REDACTED

插件 POM:

<project>
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>REDACTED</groupId>
        <artifactId>REDACTED</artifactId>
        <version>1.0.0-SNAPSHOT</version>
        <relativePath>REDACTED</relativePath>
    </parent>
    <groupId>REDACTED</groupId>
    <artifactId>REDACTED.pluginname</artifactId>
    <version>1.0.0-SNAPSHOT</version>
    <packaging>eclipse-plugin</packaging>
</project>

测试类

import static org.junit.Assert.*;
import org.junit.Test;
import REDACTED.pluginname.Argument;

public class PlanImportTest {

    @Test
    public void test() {
        Argument a = null;
        assertTrue(true);
    }
}

测试项目清单:

Manifest-Version: 1.0
Bundle-ManifestVersion: 2
Bundle-Name: REDACTED
Bundle-SymbolicName: REDACTED.tests
Bundle-Version: 1.0.0.qualifier
Bundle-Vendor: REDACTED
Fragment-Host: REDACTED.pluginname;bundle-version="1.0.0.qualifier"
Bundle-RequiredExecutionEnvironment: JavaSE-1.8
Require-Bundle: org.junit;bundle-version="4.12.0"

测试项目 POM:

<project>
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>REDACTED</groupId>
        <artifactId>REDACTED</artifactId>
        <version>1.0.0-SNAPSHOT</version>
        <relativePath>REDACTED</relativePath>
    </parent>
    <groupId>REDACTED</groupId>
    <artifactId>REDACTED.tests</artifactId>
    <version>1.0.0-SNAPSHOT</version>
    <packaging>eclipse-test-plugin</packaging>
    <build>
        <plugins>
            <plugin>
                <groupId>org.eclipse.tycho</groupId>
                <artifactId>tycho-surefire-plugin</artifactId>
                <configuration>
                    <testClass>REDACTED.Test</testClass>
                    <dependencies>
                        <dependency>
                            <type>eclipse-plugin</type>
                            <groupId>REDACTED</groupId>
                            <artifactId>REDACTED.pluginname</artifactId>
                            <version>1.0.0-SNAPSHOT</version>
                        </dependency>
                    </dependencies>
                </configuration>
            </plugin>
        </plugins>
    </build>
</project>

【问题讨论】:

  • 应该不需要在测试项目 pom.xml 中显式声明依赖。相反,您的父 pom 应该将两个项目都列为“模块”。
  • 啊,是的,我已经这样做了,并且首先成功加载了 pluginname 模块。我将从 pom 中删除这个插件,这是我尝试过的,除了其他的东西,希望让它工作。

标签: java maven eclipse-plugin osgi tycho


【解决方案1】:

原来问题是我要测试的插件没有正确导出源目录。对 build.properties 文件的更改修复了这个问题:

之前:

bin.includes = META-INF/,\
               src/
output.. = bin

之后:

bin.includes = META-INF/,\
               src/
source.. = src
output.. = bin

如此简单,但我最终做到了。

【讨论】:

    【解决方案2】:

    当您使用片段时,不需要对 pom.xml 中片段主机的附加依赖。

    在您的问题中对我来说似乎不完整的一件事是使用伙伴类加载。如果您正在编译的类实际上是由被测包的好友提供的(而不是包本身),您可能需要向好友添加一个额外的需求,请参阅https://eclipse.org/tycho/sitedocs/tycho-surefire/tycho-surefire-plugin/test-mojo.html#dependencies

    出于调试目的,您可以使用 maven CLI 选项 -X 将转储计算为包含在测试运行时中的包。这样您就可以发现是否缺少捆绑包。

    【讨论】:

    • 这是否意味着我还需要将被测插件的好友添加到reactor pom构建的模块列表中?
    • 我从正在测试的插件中删除了好友,以尝试查看是否可以隔离问题,但我仍然遇到与以前相同的错误。我还从测试插件 pom 中删除了该片段。对于 mvn -X 我应该在类路径中查找吗?如果是这样显示我的项目:[DEBUG] 输出目录:REDACTED.tests/target/classes [DEBUG] 类路径:[DEBUG] REDACTED.tests/target/classes [DEBUG] REDACTED.pluginname/. [调试] /home/developer/.m2/repository/.cache/tycho/org.junit-4.12.0.v201504281640.jar...
    猜你喜欢
    • 2013-08-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-12-13
    • 1970-01-01
    • 1970-01-01
    • 2018-12-08
    • 2014-02-26
    相关资源
    最近更新 更多