You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.30 13:02:35