--- title: "Java Configuration" description: "Configure Codeflash for Java projects" icon: "java" sidebarTitle: "Java" keywords: [ "configuration", "java", "maven", "gradle", "junit", "pom.xml", "gradle.properties", ] --- # Java Configuration Codeflash stores its configuration inside your existing build file — `pom.xml` properties for Maven projects, or `gradle.properties` for Gradle projects. No separate config file is needed. ## Maven Configuration For Maven projects, Codeflash writes properties under the `` section of your `pom.xml` with the `codeflash.` prefix: ```xml src/main/java src/test/java origin mvn spotless:apply -DspotlessFiles=$file false src/main/java/generated/ ``` ## Gradle Configuration For Gradle projects, Codeflash writes settings to `gradle.properties` with the `codeflash.` prefix: ```properties codeflash.moduleRoot=src/main/java codeflash.testsRoot=src/test/java codeflash.gitRemote=origin ``` Codeflash auto-detects most settings from your project structure. Running `codeflash init` will set up the correct config — manual configuration is usually not needed. For standard Maven/Gradle layouts, Codeflash may write no config at all if all defaults are correct. ## Auto-Detection When you run `codeflash init`, Codeflash inspects your project and auto-detects: | Setting | Detection logic | |---------|----------------| | **Source root** | Looks for `src/main/java` (Maven/Gradle standard layout), falls back to pom.xml `sourceDirectory` | | **Test root** | Looks for `src/test/java`, `test/`, `tests/` | | **Build tool** | Detects Maven (`pom.xml`) or Gradle (`build.gradle` / `build.gradle.kts`) | | **Test framework** | Checks build file dependencies for JUnit 5, JUnit 4, or TestNG | ## Configuration Options | Property | Description | Default | |----------|-------------|---------| | `moduleRoot` | Source directory to optimize | `src/main/java` | | `testsRoot` | Test directory | `src/test/java` | | `gitRemote` | Git remote for pull requests | `origin` | | `formatterCmds` | Code formatter command (`$file` placeholder for file path) | (none) | | `disableTelemetry` | Disable anonymized telemetry | `false` | | `ignorePaths` | Paths within source root to skip during optimization | (none) | Only non-default values are written to the config. If your project uses the standard `src/main/java` and `src/test/java` layout with the default `origin` remote, Codeflash may not need to write any config properties at all. ## Multi-Module Projects For multi-module Maven/Gradle projects, run `codeflash init` from the module you want to optimize. The config is written to that module's `pom.xml` or `gradle.properties`: ```text my-project/ |- client/ | |- src/main/java/com/example/client/ | |- src/test/java/com/example/client/ | |- pom.xml <-- run codeflash init here |- server/ | |- src/main/java/com/example/server/ |- pom.xml ``` For non-standard layouts (like the Aerospike client where source is under `client/src/`), `codeflash init` will prompt you to override the detected paths. ## Tracer Options When using `codeflash optimize` to trace a Java program, these CLI options are available: | Option | Description | Default | |--------|------------|---------| | `--timeout` | Maximum time (seconds) for each tracing stage | No limit | | `--max-function-count` | Maximum captures per method | 100 | | `--trace-only` | Trace and generate replay tests without optimizing | `false` | Example with timeout: ```bash codeflash optimize --timeout 30 java -jar target/my-app.jar --app-args ``` ## Example ### Standard Maven project ```text my-app/ |- src/ | |- main/java/com/example/ | | |- App.java | | |- Utils.java | |- test/java/com/example/ | |- AppTest.java |- pom.xml ``` Standard layout — no extra config needed. `codeflash init` detects everything automatically. ### Gradle project ```text my-lib/ |- src/ | |- main/java/com/example/ | |- test/java/com/example/ |- build.gradle |- gradle.properties <-- codeflash config written here if overrides needed ``` Standard layout — no extra config needed. `codeflash init` detects everything automatically.