Zum Inhalt springen

Bestehendes Projekt übernehmen

Migrieren Sie ein Java-, Kotlin- oder Spring-Boot-Projekt mit elide adopt von Maven oder Gradle zu Elide: was der Befehl ausführt, seine Flags und Exit-Codes, für welche Projekte er passt und ein durchgespieltes Beispiel.

Auf dieser Seite

elide adopt startet einen KI-Coding-Agenten (Codex, Claude Code oder OMP) im aktuellen Verzeichnis mit einem eingebauten Migrations-Prompt. Der Agent liest den Build, bearbeitet Dateien und führt Elide aus; Elide selbst bearbeitet nichts. Der Prompt zielt auf Java- und Kotlin-Projekte, die mit Maven oder Gradle gebaut werden, insbesondere Spring Boot, und weist den Agenten an, alle anderen Sprachen funktionsfähig zu halten.

elide adopt

elide adopt migriert den Build nach elide.pkl. Wie Sie Maven, Gradle oder Bazel behalten und darin die Compiler von Elide verwenden, beschreibt Build-Tool-Integration.

Für welche Projekte sich der Befehl eignet

ProjektEignungGrund
Java- oder Kotlin-Anwendung mit einem Modul auf Maven oder GradleGutAbhängigkeiten, Quell-Layout, Tests und JAR lassen sich auf elide.pkl abbilden. Getestet.
Spring-Boot-Anwendung oder -DienstGutDer Prompt prüft Hauptklasse, Spring-Abhängigkeiten und -Plugins, Ressourcen, Tests und Paketierung. Getestet.
Ein JVM-Build, den Sie behalten möchten, mit Elide nur zum Ausführen und KompilierenGutWählen Sie Bestehender Build: Eine elide.pkl ist nicht erforderlich.
Builds mit mehreren ModulenUngetestetElide hat Workspaces, aber der Prompt wurde damit nicht evaluiert.
Viele eigene Plugins, generierte Quellen, ungewöhnliche AnnotationsverarbeitungSchlechtDer Agent behält Maven oder Gradle für Schritte, die Elide nicht ersetzt; rechnen Sie mit einer teilweisen Migration.
AndroidUngetestetDer Prompt wurde nicht mit Android-Builds evaluiert.
Nur JavaScript, TypeScript oder PythonNicht nötigElide führt package.json-Skripte, pyproject.toml-Einstiegspunkte und node:test-Dateien ohne Migration aus; siehe Projekteinrichtung.

Getestete Projekte

Diese Projektformen bestehen elide install, elide build, elide test, den Start und den ursprünglichen Build, ausgehend von einem frischen Checkout, mit dem Agenten Codex:

ProjektformBestehender BuildGetestet mit
Java, Spring-Boot-AnwendungMavenSpring Petclinic: Abhängigkeiten, Ressourcen, Tests, lauffähige Anwendung, JAR
Java, Spring-Boot-DienstGradleSpring-REST-Dienst: Abhängigkeiten, Ressourcen, Tests, HTTP-Bereitschaft
Kotlin/JVM-KommandozeilenanwendungGradle Kotlin DSLEin Modul mit Kotlin-Serialisierung und Koroutinen

Der Agent Claude Code wird an der Kotlin-Anwendung im durchgespielten Beispiel gezeigt.

Bevor Sie beginnen

  1. Installieren Sie einen Agenten und melden Sie sich an. Elide startet ihn über PATH:

    AuswahlProgrammAgent
    codexcodexOpenAI Codex CLI
    claudeclaudeClaude Code
    ompompOMP
  2. Committen Sie das Projekt, damit die Migration ein einzelner prüfbarer Diff ist.

  3. Bauen Sie es einmal mit Maven oder Gradle, damit es einen bekannt guten Ausgangszustand gibt.

  4. Wechseln Sie mit cd in das Projekt oder übergeben Sie -p DIR.

Interaktiv ausführen

elide adopt stellt drei Fragen und startet dann den Agenten. Flags beantworten eine Frage im Voraus.

FrageAntwortenFlag
Use elide build with an elide.pkl project manifest?Ja (Standard): Elide-Build. Nein: Bestehender Build--build elide, --build existing
Which AI coding harness should perform the migration?codex, claude, omp--harness
How should the harness approve tool calls?auto-approve, manual-approve, yolo--approval
elide adopt --build elide --harness claude

Esc bei einer Frage beendet den Befehl mit Exit-Code 0, ohne den Agenten zu starten. Strg+C stoppt den Agenten und endet mit Exit-Code 130.

Build-Strategie

StrategieDer Prompt weist den Agenten an,
Elide-Buildelide.pkl zu schreiben: src/main/src/test ohne deklarierte Source-Sets beizubehalten, Versionen und Scopes der Abhängigkeiten zu übernehmen, Java-Target und -Release zu setzen und das JAR mit seiner Hauptklasse zu definieren. Maven oder Gradle zu behalten, bis ein abschließendes elide install, elide build, elide test, elide run und der ursprüngliche Build erfolgreich sind.
Bestehender BuildMaven oder Gradle als Build zu behalten; die Laufzeit und Werkzeuge von Elide nur dort einzusetzen, wo sie helfen; elide.pkl nicht nur für elide build anzulegen.

Beide enden mit einer Zusammenfassung der geänderten Dateien, der ausgeführten Validierung und allem, was noch offen ist.

Freigabemodus

ModusCodexClaude CodeOMPGeeignet für
auto-approve--approve-for-me--permission-mode auto--auto-approveEinen committeten Arbeitsbaum, den Sie prüfen werden.
manual-approve(kein Flag)--permission-mode manual--approval-mode=always-askUnbekannte oder sensible Repositorys.
yolo--dangerously-bypass-approvals-and-sandbox--permission-mode bypassPermissions--approval-mode=yoloWegwerfumgebungen ohne Geheimnisse.

Mit auto-approve oder yolo führt Elide den Agenten im Batch-Modus aus (codex exec --skip-git-repo-check, claude --print, omp --print) und zeigt eine Fortschrittszeile; --log gibt zusätzlich die Ausgabe des Agenten aus. Mit manual-approve läuft der Agent interaktiv, und seine Ausgabe wird immer angezeigt.

Ohne Rückfragen ausführen

elide adopt \
  --build elide \
  --harness codex \
  --approval auto-approve \
  --non-interactive

--non-interactive erfordert --build, --harness und --approval; fehlt eines, endet der Befehl mit Exit-Code 2. Das Flag lehnt manual-approve ab. Ohne Terminal endet elide adopt mit Exit-Code 1, außer --non-interactive und alle drei sind angegeben.

Hinweise ergänzen

--prompt-append FILE hängt eine UTF-8-Datei unter Additional adoption guidance: an das Ende des Prompts an. Wiederholen Sie das Flag, um mehrere Dateien der Reihe nach anzuhängen:

elide adopt --prompt-append ./adoption-guidance.md --prompt-append ./team-rules.md

Nutzen Sie das Flag für Fakten, die der Agent nicht ableiten kann: interne Repositorys, welcher Build bleiben soll, Befehle, die weiter funktionieren müssen.

Ausgabe und Exit-Codes

Die Änderungen des Agenten sind die einzige Ausgabe im Projekt. Im durchgespielten Beispiel waren das eine neue elide.pkl und .gitignore-Einträge für .dev/. Elide gibt vor dem Start Adoption log: PATH aus; das Log bleibt unter .dev/logs/adopt-<timestamp>-<pid>.log im Projekt erhalten.

Exit-CodeBedeutung
0Der Agent endete mit Exit-Code 0, oder eine Frage wurde abgebrochen.
1Der Agent schlug fehl (Error: claude exited unsuccessfully (exit status: 3)), konnte nicht starten (Error: failed to launch codex: No such file or directory), eine --prompt-append-Datei ist nicht lesbar, oder es gibt kein Terminal.
2Ein Flag fehlt oder ist ungültig.
130Mit Strg+C unterbrochen.

Migration prüfen

Exit-Code 0 bedeutet, dass der Agent fertig ist, nicht dass die Migration korrekt ist. Prüfen Sie den Diff: Versionen der Abhängigkeiten, Quell- und Ressourcenverzeichnisse, Einstiegspunkt, Tests und Paketierung. Führen Sie dann aus:

elide install
elide build
elide test
elide run

Führen Sie auch den ursprünglichen Maven- oder Gradle-Build aus, solange er existiert. Ist das Ergebnis falsch, setzen Sie die Änderungen zurück, ergänzen Sie Hinweise mit --prompt-append und starten Sie erneut.

Durchgespieltes Beispiel

Eine Kotlin-Kommandozeilenanwendung mit einem Modul, gebaut mit Gradle Kotlin DSL: Kotlin 2.3.20, JVM 17, kotlinx-coroutines-core 1.10.2, kotlinx-serialization-json 1.9.0 und ein kotlin("test")-Test. Nach dem Commit:

elide adopt --build elide --harness claude --approval auto-approve --non-interactive
Adoption log: /path/to/project/.dev/logs/adopt-1767225600-973648.log
[3m 56s] ✓ Project adopted in 3m 56s

Der Agent fügte elide.pkl und eine .gitignore hinzu und änderte nichts anderes. Das Manifest übernimmt die Gradle-Versionen und überträgt den Rest in die Begriffe von Elide:

amends "elide:project.pkl"

import "elide:Jvm.pkl" as Jvm
import "elide:Kotlin.pkl" as Kotlin

name = "kotlinx-cli"
version = "1.0.0"

dependencies {
  maven {
    packages {
      "org.jetbrains.kotlinx:kotlinx-coroutines-core:1.10.2"
      "org.jetbrains.kotlinx:kotlinx-serialization-json:1.9.0"
      // Gradle mediates annotations to 23.0.0 (via coroutines); Elide's nearest-wins picks 13.0.
      "org.jetbrains:annotations:23.0.0"
    }
    testPackages {
      // Gradle's `kotlin("test")` with `useJUnitPlatform()` resolves to the JUnit 5 variant.
      "org.jetbrains.kotlin:kotlin-test-junit5:2.3.20"
      // The JUnit launcher; with `testing = false`, Elide does not bundle one.
      "org.junit.platform:junit-platform-console:1.10.1"
    }
  }
}

jvm {
  main = "dev.elide.samples.MainKt"
  target = 17
  features {
    // JUnit comes from testPackages above, as with Gradle's `kotlin("test")`; Elide's bundled JUnit is off.
    testing = false
  }
  java {
    source = 17
    release = 17
  }
}

kotlin {
  // Matches the Kotlin Gradle plugin version in build.gradle.kts.
  toolchain = new Kotlin.ManagedKotlinToolchain {
    version = "2.3.20"
  }
  compilerOptions {
    jvmTarget = 17
  }
  features {
    // KotlinX libraries are declared explicitly above, at the versions Gradle uses; only the
    // serialization compiler plugin (Gradle's `plugin.serialization`) is enabled.
    kotlinx = false
    serialization = true
    coroutines = false
    atomicfu = false
    powerAssert = false
    metro = false
    reflection = false
  }
}

artifacts {
  ["jar"] = new Jvm.Jar {
    name = "kotlinx-cli"
    main = "dev.elide.samples.MainKt"
  }
}

Validierung ab einem leeren .dev/:

$ elide install
[504ms] ✓ Resolved 25 Maven dependencies (476ms)
[505ms] ✓ Dependencies installed in 484ms
$ elide test
 1 pass
 0 skip
 0 fail
Ran one test across one file. (0.57s)
$ elide run
[ 16ms] ⇥ Dependencies ready (Up to date)
[ 16ms] ⇥ Kotlin main compilation skipped (Up to date)
[ 16ms] ⇥ Java main compilation skipped (Up to date)
[ 17ms] ⇥ Packaging jar 'jar' skipped (Up to date)
{"completed":["PARSE","EMIT"]}
[138ms] ✓ JVM jar application completed successfully (121ms)
[139ms] ✓ Build successful in 126ms

elide build erzeugte .dev/artifacts/jar/kotlinx-cli/kotlinx-cli.jar, und gradle build lief weiterhin erfolgreich.

Siehe auch

War diese Seite hilfreich?