当前位置: 首页 > 知识库问答 >
问题:

为什么第谷不能解决这种对SWT的简单依赖?

商泽宇
2023-03-14

我认为已经研究了足够的 Maven Tycho 来为无头构建配置至少一个最小的目标环境,但我仍然无法使这个小示例起作用。我有三个项目:

    < li >测试,包含 < ul > < li >子ui和 < li >子目标

测试项目只有一个pom.xml它构建了两个子项目,其唯一有趣的部分是

...
<build>
 <pluginManagement>
  <plugins>
    <plugin>
      <groupId>org.eclipse.m2e</groupId>
      <artifactId>lifecycle-mapping</artifactId>
      <version>1.0.0</version>
      <configuration>
        <lifecycleMappingMetadata>
          <pluginExecutions>
            <pluginExecution>
              <pluginExecutionFilter>
                <groupId>org.eclipse.tycho</groupId>
                <artifactId>target-platform-configuration</artifactId>
                <versionRange>[1.0.0,)</versionRange>
                <goals>
                  <goal>target-platform</goal>
                </goals>
              </pluginExecutionFilter>
              <action>
                <ignore />
              </action>
            </pluginExecution>
          </pluginExecutions>
        </lifecycleMappingMetadata>
      </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>
        <pomDependencies>wrapAsBundle</pomDependencies>
        <target>
          <artifact>
            <groupId>${project.groupId}</groupId>
            <artifactId>sub.target</artifactId>
            <version>0.0.1-SNAPSHOT</version>
          </artifact>
        </target>
        <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>
 </pluginManagement>
</build>
...

冗长但非常简单(除了生命周期映射插件,它只在Eclipse下构建时有影响,我想在Eclipse外构建)。sub.target项目有一个规范的pom.xml,只有:

...
<build>
 <plugins>
  <plugin>
    <groupId>org.eclipse.tycho</groupId>
    <artifactId>tycho-maven-plugin</artifactId>
  </plugin>

  <plugin>
    <groupId>org.eclipse.tycho</groupId>
    <artifactId>target-platform-configuration</artifactId>
  </plugin>
 </plugins>
</build>
...

和一个简短的子目标目标文件:

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<?pde version="3.8"?>
<target includeMode="feature" name="Test" sequenceNumber="1">
  <locations>
    <location includeAllPlatforms="false" includeConfigurePhase="true" includeMode="planner" includeSource="true" type="InstallableUnit">
      <repository location="https://download.eclipse.org/releases/latest/"/>
      <unit id="org.eclipse.equinox.p2.user.ui.feature.group" version="0.0.0"/>
    </location>
  </locations>
  <targetJRE path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-11"/>
</target>

sub. ui项目是一个小型插件项目,带有一个使用SWT类的愚蠢main:

package foo;

import org.eclipse.swt.widgets.Label;

public class Main {
  public static void main(String[] args) {
    Label l = new Label(null, 0);
  }
}

和清单。MF:

Manifest-Version: 1.0
Bundle-ManifestVersion: 2
Bundle-Name: Test UI
Bundle-SymbolicName: sub.ui;singleton:=true
Bundle-Version: 0.0.1.qualifier
Automatic-Module-Name: sub.ui
Bundle-RequiredExecutionEnvironment: JavaSE-11
Require-Bundle: org.eclipse.swt

现在,如果我打开一个控制台,并且我<code>mvn clear-comple</code>,Maven在构建测试UI插件时失败,并显示错误:

[ERROR] Failed to execute goal org.eclipse.tycho:tycho-compiler-plugin:2.4.0:compile (default-compile) on project sub.ui: Compilation failure: Compilation failure: 
[ERROR] /.../sub.ui/src/foo/Main.java:[3] 
[ERROR]     import org.eclipse.swt.widgets.Label;
[ERROR]            ^^^^^^^^^^^
[ERROR] The import org.eclipse cannot be resolved
[ERROR] /.../sub.ui/src/foo/Main.java:[8] 
[ERROR]     Label l = new Label(null, 0);
[ERROR]     ^^^^^
[ERROR] Label cannot be resolved to a type
[ERROR] /.../sub.ui/src/foo/Main.java:[8] 
[ERROR]     Label l = new Label(null, 0);
[ERROR]                   ^^^^^
[ERROR] Label cannot be resolved to a type
[ERROR] 3 problems (3 errors)

显然,构建过程没有将我的代码与我的macos cocoa平台的SWT版本链接起来,尽管如此,该版本仍列在org . eclipse . equinox . p2 . user . ui . feature . group的插件中。奇怪的是,如果我不时地从Eclipse启动Maven,它会链接正确的SWT库并完成构建过程。我错过了什么?我如何说服Tycho使用关于我的平台的信息来一致地选择macos可可SWT罐并将其链接到我的代码?如果你不能发现上面代码中的错误,我可以在GitHub上分享完整的示例项目。谢谢你的耐心。


共有1个答案

路雅懿
2023-03-14

问题解决了。显然,x86平台不再受支持(我正在做的项目已经很老了)。如果我们删除所有x86

 类似资料:
  • 我想将此SecureSocial快照用于我的项目: 版本信息: Scala版本:2.11.5 SBT版本:0.13.8 播放版本:2.3.7

  • 我关闭了我的android项目,突然当我想再次打开我的项目时,它给了我错误??? 错误:无法解析“:app@debugandroidtest/compileclasspath”的依赖项:无法解析AndroidX.test:runner:1.2.0. 错误:无法解析“:app@debugandroidtest/compileclasspath”的依赖项:无法解析Androidx.test.ext:J

  • 问题: impl: @Service public class GraduateCollegeServiceImpl extends ServiceImpl<GraduateCollegeMapper, GraduateCollege> implements IGraduateCollegeService { controller: @Api(tags="各高校") @RestController

  • 我正在学习使用stl向量,这是奇怪的,这个程序不能工作。这有什么问题?如果我想用Vector实现同样的功能,应该怎么做呢?

  • 我试图制作一个基本的C程序来读取一个文件,但由于某种原因,当我使用运行它时<代码>/Test1 Test1。txt我得到“错误:'s'可能在未初始化的情况下用于此函数”。

  • 问题内容: 假设这是一个销售相机的网站。这是我的实体(表): 事情是在相机和功能之间,我之间存在多对多关系,所以我有一张额外的桌子: 因此,查询很简单: 如何获得所有具有1,2和3功能的相机? 这就像构造一个位图索引。 您可以用来测试解决方案是否正确的数据 以下是查询和预期结果: 显示所有具有功能1,2和3: C1* 的相机 * 显示所有具有功能1,2和4的相机: C2 显示所有具有功能1和2的相

  • 我一直在尝试编写一个程序来实现任意域上的多项式,一种数学结构。我选择了Haskell作为编程语言,我使用了语言扩展。但是,我不明白为什么GHCi不能推导出的约束条件。 在我看来,保证是的实例,这意味着是的实例。所以调用就像调用一样,应该是合理的。此外,我已经编写了作为约束,并且的构造函数具有的形状,因此它还应该知道的类型是的实例。 显然,译员的想法不同。我哪里搞错了?

  • 所以,我正在为一个班级做这个作业。这是一个Java类,我应该做一个游戏,它掷两个骰子,把它们相加,然后把它们加到你的回合分数上。然后它会问你是否想继续玩下去。当你的轮次得分达到20分,或者当你决定通过时,它会进入电脑。它应该打印每个回合的分数,然后当有人得到100分时,它就会宣布胜利者。然而,不管怎样,无论我跑了多少圈,每一圈结束时的分数都是0。当一名玩家掷1时,他们的回合分数被取消,并转移到另一