Tôi gọi ant.signjar từ tập lệnh gradle. Làm thế nào tôi có thể nắm bắt đầu ra của nó? Tôi đã không làm cho nó được quản lý một cách dễ dàng để nâng cao đầu ra từ INFO đến một cấp độ khác, cũng không để chặn hoặc bọc đầu ra để cảnh báo lỗi ra mức WARN. Hiện tại signjar phản hồi rằng chứng chỉ sẽ hết hạn sớm, nhưng điều này không được hiển thị trên mức WARN không tốt đến mức nào.Làm cách nào để chặn hoặc nâng cao thông điệp tường trình khi gọi một tác vụ Ant từ Gradle
Trả lời
Tôi cho rằng tác vụ Ant đang sử dụng khung ghi nhật ký của Ant và không chỉ in ra tiêu chuẩn. Trong trường hợp đó, bạn đã thử những điều sau đây chưa?
task taskThatCallsAntTask {
logging.level = LogLevel.INFO
}
Khi được cấu hình theo cách này, mức độ đăng nhập sẽ được thay đổi để INFO trong khi nhiệm vụ đang thực hiện (và quay trở lại sau đó), bất kể đó đăng nhập mức được thiết lập khi gọi Gradle. Lưu ý rằng bạn không thể nâng mức nhật ký của sự kiện bản ghi Ant; tùy thuộc vào nhiệm vụ Ant ở cấp độ nào nó ghi lại.
Điều đó hoạt động, nhưng sau đó cung cấp quá nhiều ghi nhật ký vì nó cũng in các thư khác không phải là cảnh báo. Tôi thực sự thích nếu tôi có thể đánh chặn đầu ra và nâng cao trên một phạm vi cho mỗi dòng. Bất kỳ ý tưởng về điều đó? – Vampire
Đăng yêu cầu tính năng (* ý tưởng *) tại http://forums.gradle.org. –
Đã làm như vậy tại http://forums.gradle.org/gradle/topics/interception_of_ant_task_output, nhờ – Vampire
Đây là phương pháp để ghi lại đầu ra của tác vụ Ant bằng cách đăng ký một BuildListener tùy chỉnh trong suốt thời gian của cuộc gọi.
def captureAntOutput(ant, Closure command) {
def buffer = new ByteArrayOutputStream()
def captureStream = new PrintStream(buffer, true, "UTF-8")
def listener = new org.apache.tools.ant.DefaultLogger(
errorPrintStream: captureStream,
outputPrintStream: captureStream,
messageOutputLevel: org.apache.tools.ant.Project.MSG_INFO
)
ant.project.addBuildListener(listener)
project.configure(ant, command)
ant.project.removeBuildListener(listener)
return buffer.toString("UTF-8");
}
Ví dụ sử dụng:
String result = captureAntOutput(ant) {
echo(message: "hello")
}
assert result.contains("hello")
Là một phụ lưu ý: Gradle cung cấp [ký Plugin] (http://gradle.org/docs/current/userguide/signing_plugin.html) để ký kết tạo tác, do đó bạn không cần sử dụng tác vụ Ant. –
@BenjaminMuschko Tôi biết về plugin ký, nhưng tài liệu nói rằng chỉ để tạo các chữ ký PGP của các tệp, ví dụ: để tải lên Maven Central. Làm cách nào để đăng ký tệp JAR bằng plugin ký? – Vampire