【问题标题】:Classes from required Eclipse plugins are missing when building with Maven使用 Maven 构建时缺少来自所需 Eclipse 插件的类
【发布时间】:2015-04-13 01:51:43
【问题描述】:

我想用 Tycho 进行最简单的 Maven 构建,但无法正常工作。我的项目只有一个 pom.xml 文件,没有父或兄弟 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 tycho


    【解决方案1】:

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

    要激活 Tycho,需要添加配置

    <packaging>eclipse-plugin</packaging>
    

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


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

    【讨论】:

      【解决方案2】:

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

      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>
      

      根据您的平台更改您的。

      【讨论】:

      • 谢谢!我记得在某处读到添加maven-eclipse-plugin 是我们依赖项所需的全部内容。我添加了所有依赖项,但仍然得到package org.eclipse.swt.widgets does not exist 错误。 (注意这是唯一的编译错误,其他的都没有了)
      • @SarpKaya 已编辑。请注意,插件用于支持不同生命周期步骤的执行,它们不用于解析编译时导入。
      • 感谢更新,但如果我想为多平台做呢?
      • @SarpKaya 包含您想要支持的所有平台的依赖项。当您打包和分发您的工件时,还应提供相关的 jar,以便您支持的平台上的任何人都可以运行。
      • OP 说“我想(...)用第谷构建”。这个解决方案没有使用第谷,而是描述了一种没有第谷的潜在方法。
      猜你喜欢
      • 2012-06-22
      • 2012-10-22
      • 2016-01-06
      • 2012-12-06
      • 2013-12-12
      • 1970-01-01
      • 2020-03-03
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多