Thật không may, Gradle chạy Jetty bên trong JVM riêng của nó, vì vậy bạn không thể đặt javaagent chỉ cho một tác vụ cụ thể. Nó được thiết lập cho toàn bộ JVM. Vì vậy, bạn có hai cách để thực hiện những gì bạn muốn: hoặc bạn chạy Gradle với javaagent được kích hoạt, hoặc bạn sinh ra một quá trình JVM khác và chạy Jetty trong đó.
Giải pháp đầu tiên khá dễ dàng: cung cấp tùy chọn như bình thường. Ví dụ: đặt org.gradle.jvmargs = "-javaagent:/home/audrius/org.springframework.instrument-3.0.5.RELEASE.jar"
trong gradle.properties
Cách thứ hai là khá khó khăn. Bạn không thể chỉ sinh ra JVM mới và nói "chạy nhiệm vụ Gradle" này cho nó. Tôi đoán bạn sẽ cần phải sử dụng Gradle Tooling API để đẻ trứng quá trình mới dựa trên exising bạn xây dựng cấu hình qua GradleConnector:
task run << {
ProjectConnection connection = GradleConnector.newConnector().forProjectDirectory(new File("someProjectFolder")).connect();
try {
BuildLauncher build = connection.newBuild();
build.setJvmArguments("-javaagent:/home/audrius/org.springframework.instrument-3.0.5.RELEASE.jar")
build.forTasks("jettyRun").run();
} finally {
connection.close();
}
}
Như bạn thấy, giải pháp thứ hai là khá xấu xí. Tôi nên chọn cách tiếp cận đầu tiên hơn.
Lỗi tôi với:: không thể giải quyết lớp ProjectConnection ". .. –
Bạn đã thêm 'gradleApi()' vào đường dẫn kịch bản lệnh xây dựng chưa? – madhead
Tùy chọn đầu tiên hoạt động như một sự quyến rũ! – varra