使用 Tycho 的测试插件片段无法解析导入,但在 Eclipse 中有效
Import cannot be resolved by test plugin fragment using Tycho but works in Eclipse
我有一个插件项目,我正在尝试为其创建一个测试插件。我的插件项目中的包可用于我工作区中的其他插件,包括测试插件,但是当我尝试使用 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
我是 Tycho 的新手,所以我认为我的项目布局可能有问题,但我无法在线找到问题的解决方案。有谁知道为什么这个导入在 eclipse 中有效,但在命令行上构建 运行 a 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>
测试class
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 中对片段主机的额外依赖。
在我看来,你的问题中有一点似乎不完整,那就是伙伴类加载的使用。如果你正在编译的 类 实际上是由被测包的伙伴提供的(而不是包本身),你可能必须向伙伴添加一个 extraRequirement,见 https://eclipse.org/tycho/sitedocs/tycho-surefire/tycho-surefire-plugin/test-mojo.html#dependencies
出于调试目的,您可以使用 maven CLI 选项 -X,它将转储计算为包含在测试运行时中的包。这样您就可以发现是否缺少包裹。
原来问题是我要测试的插件没有正确导出源目录。对 build.properties 文件的更改修复了此问题:
之前:
bin.includes = META-INF/,\
src/
output.. = bin
之后:
bin.includes = META-INF/,\
src/
source.. = src
output.. = bin
很简单,但我最终做到了。
我有一个插件项目,我正在尝试为其创建一个测试插件。我的插件项目中的包可用于我工作区中的其他插件,包括测试插件,但是当我尝试使用 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
我是 Tycho 的新手,所以我认为我的项目布局可能有问题,但我无法在线找到问题的解决方案。有谁知道为什么这个导入在 eclipse 中有效,但在命令行上构建 运行 a 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>
测试class
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 中对片段主机的额外依赖。
在我看来,你的问题中有一点似乎不完整,那就是伙伴类加载的使用。如果你正在编译的 类 实际上是由被测包的伙伴提供的(而不是包本身),你可能必须向伙伴添加一个 extraRequirement,见 https://eclipse.org/tycho/sitedocs/tycho-surefire/tycho-surefire-plugin/test-mojo.html#dependencies
出于调试目的,您可以使用 maven CLI 选项 -X,它将转储计算为包含在测试运行时中的包。这样您就可以发现是否缺少包裹。
原来问题是我要测试的插件没有正确导出源目录。对 build.properties 文件的更改修复了此问题:
之前:
bin.includes = META-INF/,\
src/
output.. = bin
之后:
bin.includes = META-INF/,\
src/
source.. = src
output.. = bin
很简单,但我最终做到了。