Eclipse Maven 依赖项 jar 变灰,无法从中导入 类
Eclipse Maven dependency jar grayed out, can't import classes from it
第一次用m2eclipse帮朋友配置maven项目。我们都非常不熟悉它并且遇到了一个问题,即使依赖 jar 显示在项目目录中 "maven dependencies" 下的包中,如果我们尝试从任何那个 jar 的包中导入任何东西,它找不到 class.
我注意到有问题的罐子是灰色的,不像其他正常工作的罐子那样不透明。
奇怪的是,如果您将鼠标悬停在导入中的 class 名称上,它会显示 class 的简短描述(来自 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>
我不确定我在这里遗漏了什么
我发现了问题。这是因为我在源目录而不是测试目录中有 class 并且两个 Maven 依赖项都被标记为 "Visible only to test"
我不确定灰色部分。如果这是功能,因为它建议测试 class 应该在 /test 而不是 /src 下。
但是,解决您的问题的方法是插件的范围,将其更改为编译,您就可以开始了。
即用编译替换测试:
<scope>test</scope>
<scope>compile</scope>
就是这样。导入测试包不会出现任何错误。
我在 maven pom 中使用 <scope>test</scope>
时遇到了同样的问题。
似乎较新的 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
启用此功能后,我摆脱了所有编译器错误。
打开您的 pom.xml 文件
检查变灰的 jar 文件的名称
改变
<scope>test</scope>
至
<scope>compile</scope>
检查 POM 文件中的依赖范围
编译、提供、系统和测试这些是可用的测试
test -> compile 会将您的依赖项从灰色更改为白色。
如果您的依赖项用于测试范围,则该依赖项无法在应用程序中正常使用,而编译范围会在项目的 class 路径中设置该依赖项。
只需删除 Scope
即可。我试过如下:
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter-api</artifactId>
<version>5.8.0-M1</version>
</dependency>
第一次用m2eclipse帮朋友配置maven项目。我们都非常不熟悉它并且遇到了一个问题,即使依赖 jar 显示在项目目录中 "maven dependencies" 下的包中,如果我们尝试从任何那个 jar 的包中导入任何东西,它找不到 class.
我注意到有问题的罐子是灰色的,不像其他正常工作的罐子那样不透明。
奇怪的是,如果您将鼠标悬停在导入中的 class 名称上,它会显示 class 的简短描述(来自 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>
我不确定我在这里遗漏了什么
我发现了问题。这是因为我在源目录而不是测试目录中有 class 并且两个 Maven 依赖项都被标记为 "Visible only to test"
我不确定灰色部分。如果这是功能,因为它建议测试 class 应该在 /test 而不是 /src 下。
但是,解决您的问题的方法是插件的范围,将其更改为编译,您就可以开始了。
即用编译替换测试:
<scope>test</scope>
<scope>compile</scope>
就是这样。导入测试包不会出现任何错误。
我在 maven pom 中使用 <scope>test</scope>
时遇到了同样的问题。
似乎较新的 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
启用此功能后,我摆脱了所有编译器错误。
打开您的 pom.xml 文件 检查变灰的 jar 文件的名称 改变
<scope>test</scope>
至
<scope>compile</scope>
检查 POM 文件中的依赖范围
编译、提供、系统和测试这些是可用的测试
test -> compile 会将您的依赖项从灰色更改为白色。
如果您的依赖项用于测试范围,则该依赖项无法在应用程序中正常使用,而编译范围会在项目的 class 路径中设置该依赖项。
只需删除 Scope
即可。我试过如下:
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter-api</artifactId>
<version>5.8.0-M1</version>
</dependency>