类 使用 Maven 构建时缺少所需的 Eclipse 插件

Classes from required Eclipse plugins are missing when building with Maven

我想用 Tycho 做最简单的 Maven 构建,但无法让它工作。我的项目只有一个 pom.xml 文件,没有父 POM 或兄弟 POM。

当我 运行 mvn clean install 我得到很多编译错误,其中条目如:

[ERROR] /dir/file.java:[8,33] package org.eclipse.core.commands does not exist

这是我的 POM 文件的样子:

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>com.mygroup</groupId>
    <artifactId>myartifact</artifactId>
    <version>1.0.0-SNAPSHOT</version>

    <name>myartifact</name>
    <description>Maven stuff</description>

    <properties>
        <tycho.version>0.20.0</tycho.version>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <luna-repo.url>http://download.eclipse.org/releases/luna</luna-repo.url>
        <kepler-repo.url>http://download.eclipse.org/releases/kepler</kepler-repo.url>
    </properties>

    <repositories>
        <repository>
            <id>luna</id>
            <url>${luna-repo.url}</url>
            <layout>p2</layout>
        </repository>
        <repository>
            <id>kepler</id>
            <url>${kepler-repo.url}</url>
            <layout>p2</layout>
        </repository>
    </repositories>

    <build>
        <sourceDirectory>src</sourceDirectory>
        <plugins>
            <plugin>
                <artifactId>maven-eclipse-plugin</artifactId>
                <version>2.9</version>
                <configuration>
                    <pde>true</pde>
                </configuration>
            </plugin>

            <plugin>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.1</version>
                <configuration>
                    <source>1.7</source>
                    <target>1.7</target>
                </configuration>
            </plugin>

            <plugin>
                <groupId>org.eclipse.tycho</groupId>
                <artifactId>tycho-maven-plugin</artifactId>
                <version>${tycho.version}</version>
                <extensions>true</extensions>
            </plugin>

            <plugin>
                <groupId>org.eclipse.tycho</groupId>
                <artifactId>target-platform-configuration</artifactId>
                <version>${tycho.version}</version>
                <configuration>
                    <environments>
                        <environment>
                            <os>linux</os>
                            <ws>gtk</ws>
                            <arch>x86</arch>
                        </environment>
                        <environment>
                            <os>linux</os>
                            <ws>gtk</ws>
                            <arch>x86_64</arch>
                        </environment>
                        <environment>
                            <os>win32</os>
                            <ws>win32</ws>
                            <arch>x86</arch>
                        </environment>
                        <environment>
                            <os>win32</os>
                            <ws>win32</ws>
                            <arch>x86_64</arch>
                        </environment>
                        <environment>
                            <os>macosx</os>
                            <ws>cocoa</ws>
                            <arch>x86_64</arch>
                        </environment>
                    </environments>
                </configuration>
            </plugin>
        </plugins>
    </build>
</project>

这是我的清单文件的样子:

Manifest-Version: 1.0
Bundle-ManifestVersion: 2
Bundle-Name: pluginname
Bundle-SymbolicName: pluginname;singleton:=true
Bundle-Version: 1.0.0.SNAPSHOT
Bundle-Activator: com.mygroup.pluginname.ui.Activator
Require-Bundle: org.eclipse.ui,
 org.eclipse.core.runtime,
 org.eclipse.core.resources,
 org.eclipse.ui.ide,
 org.apache.commons.io;bundle-version="2.0.1"
Bundle-RequiredExecutionEnvironment: JavaSE-1.7
Bundle-ActivationPolicy: lazy
Bundle-ClassPath: .

我真的不知道我在这里错过了什么。

您需要为您在源代码中使用的库集添加依赖项。

Maven 没有被告知获取或管理它们,因此 Eclipse 不知道它们的存在。当您尝试将它们导入源代码并进行编译时,它会生成您所看到的错误。

例如:

<dependencies>
    ...
    <dependency>
        <groupId>org.eclipse.core</groupId>
        <artifactId>commands</artifactId>
        <version>3.3.0-I20070605-0010</version>
    </dependency>
    ...
</dependencies>

有关其他图书馆所需的信息,请参阅 eclipse repository

编辑:要修复您的 SWT 编译错误,请按照 SWT-repo project's webpage 中显示的步骤进行操作。 win32 Intel x86/x64 架构的示例:

<dependency>
    <groupId>org.eclipse.swt</groupId>
    <artifactId>org.eclipse.swt.win32.win32.x86_64</artifactId>
    <version>4.4</version>
</dependency>

根据您的平台进行更改。

您的项目未指定打包类型,因此默认为 jar。对于 jar 个项目,Tycho 不执行任何操作,因此您所有其他正确的配置均无效。

激活Tycho需要添加配置

<packaging>eclipse-plugin</packaging>

然后,Tycho 将根据您在 OSGi 清单中声明的​​依赖项解析构建 class 路径。


请注意 Tycho 不使用 maven-compiler-plugin,因此在激活 Tycho 后此配置无效。另外,我没有将 maven-eclipse-plugin 与 Tycho 结合使用的经验。我建议使用 M2Eclipse 在 Eclipse 中导入项目,而不是那个插件。