Jenkins Pipeline运行Maven项目主类及解决test/resources目录不存在警告问题
我来帮你一步步搞定这两个问题:Maven提示跳过测试资源目录的警告,以及如何正确配置让Jenkins运行你的Main类。
1. 消除“跳过不存在的资源目录”警告
这个提示其实只是个警告,不是错误——Maven默认会去扫描src/test/resources目录加载测试资源,但你的项目里没有这个目录,所以它就提示跳过了。如果看着不舒服,有两种简单的解决办法:
办法一:直接创建缺失的目录
在Jenkins工作区或者本地项目里执行这条命令就行:mkdir -p src/test/resources这是最省心的方式,也完全符合Maven的标准项目结构。
办法二:在pom里配置跳过测试资源处理
如果你不想创建这个目录,可以修改pom.xml的build部分,添加maven-resources-plugin的配置,让Maven跳过测试资源的扫描:<build> <plugins> <!-- 保留你原有的其他插件,新增下面这个 --> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-resources-plugin</artifactId> <version>3.3.1</version> <executions> <execution> <id>default-testResources</id> <phase>process-test-resources</phase> <goals> <goal>testResources</goal> </goals> <configuration> <skip>true</skip> </configuration> </execution> </executions> </plugin> </plugins> </build>
2. 正确配置运行你的Main类
看了你的pom.xml,发现这里有两个关键问题:
- 你把
mainClass配置到了maven-compiler-plugin(编译插件)里,但这个插件只是用来编译代码的,根本不是用来运行主类的; - 你的Main类直接放在
src/目录下,不符合Maven默认的源文件结构(Maven默认找src/main/java下的代码),这会导致Maven找不到你的主类。
第一步:调整项目结构(强烈推荐)
先把项目改成Maven标准结构,这样后续配置会少很多麻烦:
create_pass_criteria/ ├── src/ │ ├── main/ │ │ └── java/ │ │ └── org/ │ │ └── example/ <!-- 对应你pom里的groupId org.example --> │ │ └── Main.java <!-- 把你的主类移到这里 --> │ └── test/ │ └── resources/ <!-- 刚才创建的目录 --> └── pom.xml
这样Maven会自动识别你的源文件,不需要额外配置路径。
第二步:配置Maven运行主类
有两种常用方式可以让Maven运行你的主类,选一种适合你的就行:
方式一:用maven-exec-plugin直接运行
在pom.xml的build/plugins里添加这个插件配置,它可以直接在Maven生命周期里运行主类:
<plugin> <groupId>org.codehaus.mojo</groupId> <artifactId>exec-maven-plugin</artifactId> <version>3.1.0</version> <executions> <execution> <id>run-main-class</id> <!-- 可以指定在哪个阶段运行,比如package之后、deploy之前 --> <phase>pre-deploy</phase> <goals> <goal>java</goal> </goals> </execution> </executions> <configuration> <!-- 这里填主类的全限定名,比如移到org.example包下就是org.example.Main --> <mainClass>org.example.Main</mainClass> <!-- 如果需要给主类传参数,在这里配置 --> <arguments> <argument>arg0</argument> <argument>arg1</argument> </arguments> </configuration> </plugin>
配置好之后,在Jenkins Pipeline里运行sh 'mvn clean deploy',Maven会在deploy之前自动运行你的主类;你也可以单独运行sh 'mvn exec:java'来测试效果。
方式二:打包成可执行Jar再运行
如果你需要把项目打包成可执行的Jar文件,之后再运行,可以配置maven-jar-plugin:
<plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-jar-plugin</artifactId> <version>3.3.0</version> <configuration> <archive> <manifest> <!-- 同样填主类的全限定名 --> <mainClass>org.example.Main</mainClass> <!-- 可选:自动把依赖加到Class-Path里,方便运行Jar --> <addClasspath>true</addClasspath> <classpathPrefix>lib/</classpathPrefix> </manifest> </archive> </configuration> </plugin>
然后执行mvn clean package生成可执行Jar,之后在Jenkins里用这条命令运行:
java -jar target/create_pass_criteria-1.0-SNAPSHOT.jar
第三步:删除pom里的错误配置
你之前在maven-compiler-plugin里的配置是完全错误的,compiler插件不需要mainClass参数,而且你把执行阶段放在了test,这会导致编译测试代码时执行这个配置,完全不符合你的需求。记得把这部分错误配置删掉,换成上面的exec或者jar插件配置。
额外小提示:Jenkins Pipeline分步执行更清晰
如果你希望在Jenkins里分步执行编译、运行主类、部署,可以调整Pipeline脚本,这样出问题时更容易排查:
pipeline { agent any stages { stage('Compile Code') { steps { sh 'mvn clean compile' } } stage('Run Main Class') { steps { sh 'mvn exec:java' } } stage('Deploy') { steps { sh 'mvn deploy' } } } }
内容的提问来源于stack exchange,提问作者Orly Orly

