【问题标题】:Eclipse Maven dependency jar grayed out, can't import classes from itEclipse Maven 依赖 jar 灰显,无法从中导入类
【发布时间】:2018-07-17 03:07:23
【问题描述】:

我正在帮助一个朋友第一次使用 m2eclipse 配置一个 maven 项目。我们都对它非常不熟悉,并且遇到了一个问题,即使在项目目录中的“maven 依赖项”下显示了一个依赖 jar,其中包含包,如果我们尝试从该 jar 的任何包中导入任何内容,它找不到课程。

我注意到有问题的罐子是灰色的,不像其他正在工作的罐子那样不透明。

奇怪的是,如果您将类名悬停在导入中,它会显示该类的简要描述(来自 jar 中的文档!)但它不会让我导入它。所有其他 Maven 依赖项都可以正常导入。有任何想法吗?我们似乎甚至无法找到较暗图标的含义。

另外,pom.xml 非常简单:

http://maven.apache.org/xsd/maven-4.0.0.xsd"> 4.0.0

  <groupId>com.something.portal.test</groupId>
  <artifactId>PortalFrontEndTests</artifactId>
  <version>0.0.1-SNAPSHOT</version>
  <packaging>jar</packaging>

  <name>PortalFrontEndTests</name>
  <url>http://maven.apache.org</url>

  <properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
  </properties>

  <dependencies>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>3.8.1</version>
      <scope>test</scope>
    </dependency>

    <!-- Selenium -->
    <dependency>
        <groupId>org.seleniumhq.selenium</groupId>
        <artifactId>selenium-java</artifactId>
        <version>2.53.1</version>
    </dependency>

    <!-- TestNG -->
    <dependency>
        <groupId>org.testng</groupId>
        <artifactId>testng</artifactId>
        <version>6.11</version>
        <scope>test</scope>
    </dependency>

  </dependencies>
</project>

我不确定我在这里缺少什么

【问题讨论】:

    标签: eclipse maven m2eclipse


    【解决方案1】:

    打开你的 pom.xml 文件 检查灰显的 jar 文件的名称 改变

    <scope>test</scope>
    

    <scope>compile</scope>
    

    【讨论】:

      【解决方案2】:

      我发现了问题。这是因为我将类放在源目录而不是测试目录中,并且两个 maven 依赖项都被标记为“仅对测试可见”

      【讨论】:

      • 更一般地说,当然,范围需要匹配希望导入或访问依赖项的类的位置等。
      【解决方案3】:

      在 POM 文件中检查你的依赖范围

      编译、提供、系统和测试这些是可用的测试

      test -> compile 会将您的依赖项从灰色更改为白色。

      如果您的依赖项用于测试范围,则该依赖项不能在应用程序中正常使用,而编译范围会在项目的类路径中设置该依赖项。

      【讨论】:

        【解决方案4】:

        当我在 maven pom 中使用 &lt;scope&gt;test&lt;/scope&gt; 时遇到了同样的问题。

        似乎较新的 Eclipse/Java 版本确实有一个新属性:

        <classpathentry kind="src" output="target/test-classes" path="src/test/java/...">
            <attributes>
                <attribute name="test" value="true"/>
            </attributes>
        </classpathentry>
        

        这应该在 Java 构建路径设置中启用:

        Image showing "Containts test sources" option from build path menu

        启用此功能后,我摆脱了所有编译器错误。

        【讨论】:

        • 是的,这行得通,我必须 vim .classpath 并搜索测试类,然后如上所述添加属性测试。有了这套,我可以在命令行上运行 mvn test 以及在 eclipse 中进行测试。
        【解决方案5】:

        我不确定灰色部分。如果这是功能,因为它建议测试类应该在 /test 而不是 /src 下。 但是,您的问题的解决方案是插件的范围,将其更改为编译,您会很高兴。 即用编译替换测试: &lt;scope&gt;test&lt;/scope&gt; &lt;scope&gt;compile&lt;/scope&gt;

        就是这样。导入测试包不会出现任何错误。

        【讨论】:

          【解决方案6】:

          只需删除 Scope 即可。我尝试如下:

          <dependency>
              <groupId>org.junit.jupiter</groupId>
              <artifactId>junit-jupiter-api</artifactId>
              <version>5.8.0-M1</version>
          </dependency>
          

          【讨论】:

            猜你喜欢
            • 2019-09-09
            • 1970-01-01
            • 1970-01-01
            • 2013-10-24
            • 1970-01-01
            • 2021-02-20
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多