一点一点学maven(11)——Eclipse开发Maven项目提示:程序包org.junit不存在解决方案
maven
Maven: Apache Maven是一个开源的项目管理和构建工具,主要用于Java项目。适合需要自动化项目构建和依赖管理的开发者。特点包括约定优于配置、易于使用和社区驱动。
项目地址:https://gitcode.com/gh_mirrors/ma/maven
·
1、产生的问题:
maven项目执行单元测试可以正常执行,但是执行maven命令test,则报一下异常:
org.apache.maven.plugins:maven-compiler-plugin:2.5.1:testCompile (default-testCompile) on project support: Compilation failure: Compilation failure:
[ERROR] E:\workspace\support\src\test\java\com\test\spring\support\TestSpringContextHolder.java:[7,16] 错误: 程序包org.junit不存在
[ERROR] E:\workspace\support\src\test\java\com\test\spring\support\TestSpringContextHolder.java:[16,2] 错误: 找不到符号
[ERROR] 符号: 类 Test
[ERROR] 位置: 类 TestSpringContextHolder
[ERROR] E:\workspace\support\src\test\java\com\test\spring\support\TestSpringContextHolder.java:[29,2] 错误: 找不到符号
[ERROR] 符号: 类 Before
[ERROR] 位置: 类 TestSpringContextHolder
[ERROR] E:\workspace\support\src\test\java\com\test\spring\support\TestSpringContextHolder.java:[43,5] 错误: 找不到符号
2、产生上述错误的原因:
1)、maven项目,单元测试和运行使用不同的classpath,测试使用test-classpath,运行使用classpath;
2)、创建maven项目使用junit默认的版本为3.8.1,它使用的是编程的方式,即使maven dependencies目录引入了junit,但也无法使用,只能通过build path添加junit支持
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.1</version>
<scope>test</scope>
</dependency>
3、解决方案:
将junit的版本提高到4.x,配置代码如下:
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<!-- 默认的版本为3.8.1,修改为4.x,因为3.x使用的为编程的方式,4.x为注解的形式。 -->
<version>4.11</version>
<scope>test</scope>
</dependency>
4、补充:我上面贴出的异常目录位于。。。\src\test\java\。。。,不是。。。\src\main\java\。。。,处理方式如上,如果异常发生在main目录而不是test目录,同时junit版本是4.x,解决方案则将scope属性去掉:
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<!-- 默认的版本为3.8.1,修改为4.x,因为3.x使用的为编程的方式,4.x为注解的形式。 -->
<version>4.11</version>
<!-- 去掉scope作用域,使用默认的compile,编译、测试、运行都有效的作用域 -->
<!--<scope>test</scope>-->
</dependency>
Maven: Apache Maven是一个开源的项目管理和构建工具,主要用于Java项目。适合需要自动化项目构建和依赖管理的开发者。特点包括约定优于配置、易于使用和社区驱动。
最近提交(Master分支:1 个月前 )
9b955261
This commit fixes the regression where resources with a relative targetPath
were being copied to the project root instead of relative to the output
directory (target/classes or target/test-classes).
Changes:
1. DefaultSourceRoot.fromModel: Store targetPath as a relative path instead
of resolving it against baseDir and outputDir. This ensures that
SourceRoot.targetPath() returns a relative path as intended by the
Maven 4 API javadoc.
2. ConnectedResource.computeRelativeTargetPath: Simplified to directly
return the relative targetPath from SourceRoot, since it's now always
stored as relative.
3. Updated tests to expect relative paths from SourceRoot.targetPath().
Maven 4 API Conformance:
- SourceRoot.targetPath() returns an Optional<Path> containing the explicit
target path, which should be relative to the output directory (or absolute
if explicitly specified as absolute).
- SourceRoot.targetPath(Project) resolves this relative path against the
project's output directory to produce an absolute path.
Maven 3 Compatibility:
- Resource.getTargetPath() in Maven 3 was always relative to the output
directory. This behavior is preserved by storing targetPath as relative
in SourceRoot and converting it back to relative for the Resource API
via ConnectedResource.
Example: With <targetPath>custom-dir</targetPath>:
- Maven 3: Resources copied to target/classes/custom-dir
- Maven 4 (before fix): Resources copied to project-root/custom-dir
- Maven 4 (after fix): Resources copied to target/classes/custom-dir
Fixes #11381
21 小时前
83a38634
When using flatten-maven-plugin with updatePomFile=true and parent expansion,
Maven incorrectly detected a parent cycle during the install phase. The error
occurred because the consumer POM builder was using Path instead of ModelSource
when reading the flattened POM.
This change updates the PomArtifactTransformer API to use ModelSource instead
of Path. ModelSource includes the necessary context (base directory, ModelLocator)
to properly resolve parent POMs and avoid false cycle detection.
Changes:
- Updated PomArtifactTransformer.transform() to accept ModelSource instead of Path
- Modified ConsumerPomArtifactTransformer to create ModelSource with proper resolution context
- Updated DefaultConsumerPomBuilder and related classes to work with ModelSource
- Added integration test to verify the fix
Fixes #11399
(cherry picked from commit 5ec059c2d75393aaada2d2c1d0fe0100a1f79554)
1 天前
新一代开源开发者平台 GitCode,通过集成代码托管服务、代码仓库以及可信赖的开源组件库,让开发者可以在云端进行代码托管和开发。旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。
更多推荐


所有评论(0)