mirror of
https://github.com/codeflash-ai/codeflash.git
synced 2026-05-04 18:25:17 +00:00
Java docs incorrectly referenced codeflash.toml (which doesn't exist) and omitted Java from several pages despite being fully implemented. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
139 lines
4.5 KiB
Text
139 lines
4.5 KiB
Text
---
|
|
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 `<properties>` section of your `pom.xml` with the `codeflash.` prefix:
|
|
|
|
```xml
|
|
<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:
|
|
|
|
```properties
|
|
codeflash.moduleRoot=src/main/java
|
|
codeflash.testsRoot=src/test/java
|
|
codeflash.gitRemote=origin
|
|
```
|
|
|
|
<Info>
|
|
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.
|
|
</Info>
|
|
|
|
## 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) |
|
|
|
|
<Info>
|
|
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.
|
|
</Info>
|
|
|
|
## 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.
|