:projectKey: org.optaplanner:optaplanner
:sonarBadge: image:https://sonarcloud.io/api/project_badges/measure?project={projectKey}
:sonarLink: link="https://sonarcloud.io/dashboard?id={projectKey}"

= OptaPlanner

https://www.optaplanner.org/[www.optaplanner.org]

image:https://img.shields.io/badge/stackoverflow-ask_question-orange.svg?logo=stackoverflow[
"Ask question on Stack Overflow", link="https://stackoverflow.com/questions/tagged/optaplanner"]
image:https://img.shields.io/badge/zulip-join_chat-brightgreen.svg?logo=zulip[
"Join Zulip Chat", link="https://kie.zulipchat.com/#narrow/stream/232679-optaplanner"]

{sonarBadge}&metric=alert_status["Quality Gate Status", {sonarLink}]
{sonarBadge}&metric=reliability_rating["Reliability Rating", {sonarLink}]
{sonarBadge}&metric=security_rating["Security Rating", {sonarLink}]
{sonarBadge}&metric=sqale_rating["Maintainability Rating", {sonarLink}]
{sonarBadge}&metric=ncloc["Lines of Code", {sonarLink}]
{sonarBadge}&metric=coverage["Coverage", {sonarLink}]

== Looking for Quickstarts?

OptaPlanner's quickstarts have moved to https://github.com/kiegroup/optaplanner-quickstarts[optaplanner-quickstarts repository].

== Quick development start

To build and run from source:

----
$ mvn clean install -DskipTests
$ cd optaplanner-examples
$ mvn exec:java
----

To develop with IntelliJ IDEA, Eclipse or VSCode, open the root `pom.xml` as a new project
and configure a _Run/Debug configuration_ like this:

* Type: Application
* Main class: `org.optaplanner.examples.app.OptaPlannerExamplesApp`
* VM options: `-Xmx2G -server` (memory only needed when using the big datasets in the examples)
* Program arguments: (none)
* Working directory: `$MODULE_DIR$` (must resolve to optaplanner-examples directory)
* Use classpath of module: `optaplanner-examples`

=== Starter issues

If you're just starting out with OptaPlanner and want to contribute,
take a look at our https://issues.redhat.com/issues/?jql=project%20%3D%20PLANNER%20AND%20status%20in%20(Open%2C%20Reopened)%20AND%20labels%20%3D%20starter%20ORDER%20BY%20priority%20DESC[starter issues].
They're specifically chosen to be easier for first time contributors.

== Developing Drools, OptaPlanner and jBPM

*If you want to build or contribute to a kiegroup project, https://github.com/kiegroup/droolsjbpm-build-bootstrap/blob/main/README.md[read this document].*

*It will save you and us a lot of time by setting up your development environment correctly.*
It solves all known pitfalls that can disrupt your development.
It also describes all guidelines, tips and tricks.
If you want your pull requests (or patches) to be merged into main, please respect those guidelines.

=== Code style

OptaPlanner has adopted the https://github.com/quarkusio/quarkus[Quarkus] code style, enforces it, and automatically formats code during the build.
To setup your IDE, please see the
<<build/optaplanner-ide-config/ide-configuration.adoc#, IDE Setup Instructions>>.

=== Definition of Done

To consider any individual ticket "Done", following requirements must be satisfied:

  . Every change must go through PR; source code of both the feature/bugfix and its tests have been reviewed.
  . Documentation (if applicable) exists and has been reviewed.
  . There is test coverage proving the feature works and tests are passing.

In order to avoid introducing unstable features, the PR will be merged only after these points have been fulfilled. For PRs contributed by community the core team will assist with making the functionality meet these conditions.
