= Flight Crew Scheduling (Java, Quarkus, Maven) Assign crew to flights to produce a better schedule for flight assignments. image::./flight-crew-scheduling-screenshot.png[] * <> * <> * <> * <> * <> == Prerequisites . Install Java and Maven, for example with https://sdkman.io[Sdkman]: + ---- $ sdk install java $ sdk install maven ---- [[run]] == Run the application . Git clone the timefold-quickstarts repo and navigate to this directory: + [source, shell] ---- $ git clone https://github.com/TimefoldAI/timefold-quickstarts.git ... $ cd timefold-quickstarts/java/flight-crew-scheduling ---- . Start the application with Maven: + [source, shell] ---- $ mvn quarkus:dev ---- . Visit http://localhost:8080 in your browser. . Click on the *Solve* button. Then try _live coding_: . Make some changes in the source code. . Refresh your browser (F5). Notice that those changes are immediately in effect. [[enterprise]] == Run the application with Timefold Solver Enterprise Edition For high-scalability use cases, switch to https://docs.timefold.ai/timefold-solver/latest/enterprise-edition/enterprise-edition[Timefold Solver Enterprise Edition], our commercial offering. https://timefold.ai/contact[Contact Timefold] to obtain the credentials required to access our private Enterprise Maven repository. . Create `.m2/settings.xml` in your home directory with the following content: + -- [source,xml,options="nowrap"] ---- ... timefold-solver-enterprise my_username my_password ... ---- See https://maven.apache.org/settings.html[Settings Reference] for more information on Maven settings. -- . Start the application with Maven: + [source,shell] ---- $ mvn clean quarkus:dev -Denterprise ---- . Visit http://localhost:8080 in your browser. . Click on the *Solve* button. Then try _live coding_: . Make some changes in the source code. . Refresh your browser (F5). Notice that those changes are immediately in effect. [[package]] == Run the packaged application When you're done iterating in `quarkus:dev` mode, package the application to run as a conventional jar file. . Build it with Maven: + [source, shell] ---- $ mvn package ---- . Run the Maven output: + [source, shell] ---- $ java -jar ./target/quarkus-app/quarkus-run.jar ---- + [NOTE] ==== To run it on port 8081 instead, add `-Dquarkus.http.port=8081`. ==== . Visit http://localhost:8080 in your browser. . Click on the *Solve* button. [[container]] == Run the application in a container . Build a container image: + [source, shell] ---- $ mvn package -Dcontainer ---- The container image name . Run a container: + [source, shell] ---- $ docker run -p 8080:8080 --rm $USER/flight-crew-scheduling:1.0-SNAPSHOT ---- [[native]] == Run it native To increase startup performance for serverless deployments, build the application as a native executable: . https://quarkus.io/guides/building-native-image#configuring-graalvm[Install GraalVM and gu install the native-image tool] . Compile it natively. This takes a few minutes: + [source, shell] ---- $ mvn package -Dnative ---- . Run the native executable: + [source, shell] ---- $ ./target/*-runner ---- . Visit http://localhost:8080 in your browser. . Click on the *Solve* button. == More information Visit https://timefold.ai[timefold.ai].