Problem Scenario

As a developer, us usually begin working on a project using an ide of our choice. Hence, we initially execute maven purposes like compile, package, deploy etc while working from the ide in the project brochure or workspace.

When we shot to run the exact same maven purposes from Jenkins, we room actually executing castle under the Jenkins workspace. For this reason a goal like mvn translate in will look for pom.xml within the Jenkins project (job) workspace.

As pom.xml is not available in the Jenkins job directory/folder through default, the goal will certainly not get executed and also the complying with error will be thrown.

You are watching: The goal you specified requires a project to execute but there is no pom in this directory

The goal you specified requires a task to execute but there is no POM in this brochure (...Jenkinsworkspace...). Please verify girlfriend invoked Maven native the exactly directory.Apart indigenous the above mentioned scenario, this error can also occur if for some reason we have actually not named the POM file as pom.xml

Resolution

The process usually adhered to to operation CI/CD pipelines is to check-in the code to a version manage repository. Us then having the password from version control repository and build the code utilizing an orchestration tool prefer Jenkins. As soon as we bring the source code indigenous a version manage repository supported by Jenkins, the code by default it s okay fetched in our Jenkins project workspace. Hence we will certainly not face any problem while to run maven goals directly, the same method that we execute them from our IDE.

If for some reason, we must run the code from a various directory, the resolution is to carry out the route for pom.xml if executing the maven goals.We can acheive this through using-f or file option.So instead of mentioning the goal together

mvn compile

we need to mention it as

mvn – f compile

The – f option will enable Jenkins to usage the pom.xml discussed next come it because that executing the maven goal. Moreover, if we space running the code from Jenkins agent in windows, we will have to escape backslashes in the file path by using dual backslashes as presented in password excerpt.

mvn - f ("C://projectworkspace//projectfolder//pom.xml") compileWe can also mention just the route to the folder which includes pom.xml. Jenkins will automatically search for pom.xml document in this folder.

Resolution based on Jenkins project Type

Pipeline project

If we are calling maven goals from Jenkins pipeline, most more than likely we would be using pom.xml within multiple step in her pipeline code.Hence it is recommended to define the path to pom.xml making use of def keyword, before we begin writing the password for stages.

def pomfilepath= Another method is to usage the dir directive as discussed below. The explanation under this directive will usage the course as a string ~ dir directive. For this reason we deserve to execute maven purposes the same way as we execute while structure the applications from our project IDE.

dir("/../..") mvn clean testFreestyle projectIf we room executing maven goal from a freestyle project, we have 2 options.

Goto Add construct Step -> Invoke top-level Maven targets

Here us can point out the maven goal that we want to execute. Under advanced tab, us will gain the option to specify the course of POM file.

*
Goto Add construct Step -> Execute windows batch command/ Execute shell

We have the right to use batch command or shell script depending upon the OS wherein we want to execute the maven goals.

See more: Paper Mario The Thousand Year Door Final Boss, How Do I Beat Final Boss

Build action “Execute windows batch command”

We will carry out the record path in a comparable manner together in the pipeline project. As likewise mentioned earlier, if we are running the password from jenkins certified dealer in windows, we will must escape backslashes in the record path by using twin backslashes as shown below:

mvn - f "...\project\pom.xml" clean testBuild step: Execute shellFor linux/ unix/ macOS, we will certainly invoke maven targets from shell manuscript as per following:

mvn - f .../project/pom.xml clean test

Conclusion

If we room running a project in Jenkins, we should fetch the source code with pom.xml right into Jenkins workspace or explicitly cite the course of the project directory where POM paper is located.