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 <properties> section of your pom.xml with the codeflash. prefix:
<properties>
<!-- Only non-default overrides are written -->
<codeflash.moduleRoot>src/main/java</codeflash.moduleRoot>
<codeflash.testsRoot>src/test/java</codeflash.testsRoot>
<codeflash.gitRemote>origin</codeflash.gitRemote>
<codeflash.formatterCmds>mvn spotless:apply -DspotlessFiles=$file</codeflash.formatterCmds>
<codeflash.disableTelemetry>false</codeflash.disableTelemetry>
<codeflash.ignorePaths>src/main/java/generated/</codeflash.ignorePaths>
</properties>
Gradle Configuration
For Gradle projects, Codeflash writes settings to gradle.properties with the codeflash. prefix:
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:
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:
codeflash optimize --timeout 30 java -jar target/my-app.jar --app-args
Example
Standard Maven project
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
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.