2014-10-05 35 views
7

Tôi cố gắng thêm một lệnh tùy chỉnh mới vào vỏ khởi động từ xa mùa xuân mà không thành công. Trong tài liệu chỉ là một ví dụ có sẵn nhưng tôi thích sử dụng Java để tạo một lệnh mới.spring boot remote shell lệnh tùy chỉnh

http://docs.spring.io/spring-boot/docs/current/reference/html/production-ready-remote-shell.html Tôi cũng kiểm tra tài liệu vụ tai nạn: http://www.crashub.org/1.3/reference.html#_java_commands

tôi đặt lớp học của tôi dưới lệnh gói và crash.commands nhưng tôi không thấy lệnh mới của tôi nếu tôi kết nối với vỏ qua ssh và loại giúp đỡ. Bất kỳ ý tưởng những gì tôi đang làm sai?

Đây là Mã Java của tôi:

package commands; 

import org.crsh.cli.Command; 
import org.crsh.cli.Usage; 
import org.crsh.command.BaseCommand; 
import org.springframework.stereotype.Component; 

@Component 
public class hello extends BaseCommand { 

    @Command 
    @Usage("Say Hello") 
    public String test() { 
    return "HELLO"; 
    } 
} 
+3

Tiện ích mở rộng vỏ khởi động Spring xử lý các lệnh dưới dạng tập lệnh Groovy chứ không phải là Spring bean. Mã Java của bạn thường sẽ có thể sử dụng được như Groovy; chỉ bao gồm nguồn thay vì tệp '.class' được biên dịch. – chrylis

Trả lời

1

Đặt lớp trong gói mặc định (ví dụ: bỏ qua các câu lệnh package) và đặt các nguồn Java cho lớp trong src/main/nguồn/lệnh. Spring/Crash sẽ biên dịch mã Java trong lần đầu tiên bạn gọi lệnh. Ngoài ra, nếu các lớp thực hiện một lệnh duy nhất tên phương pháp nên 'chính' nếu không người dùng phải gõ:

> hello test 

Bạn cũng không cần chú thích @Component trên lớp như nó không phải là một mùa xuân quản lý hạt đậu.

+1

Nếu lớp lệnh nằm trong gói mặc định, nó sẽ bị bỏ qua bởi 'componentScan' của Spring. Làm thế nào tôi có thể sử dụng những thứ như dịch vụ, dữ liệu mùa xuân và đậu của tôi sau đó? – ex3v

+2

Một thể hiện của BeanFactory của Spring được tạo sẵn để bạn có thể truy cập vào các script lệnh để có được các dịch vụ, vv các cá thể. Một cái gì đó như: 'BeanFactory factory = context.attributes ['spring.beanfactory'] Dịch vụ MyService = factory.getBean (MyService.class)' –

+0

Cảm ơn câu trả lời của bạn! Bạn cũng có thể cho tôi biết làm thế nào để có được bối cảnh trong trường hợp này? – ex3v

2

Nếu lớp học của bạn được gọi là 'hello', đặt nó trong

resources/crash/commands/hello/hello.java 

Có một tuyên bố gói không quan trọng. Bạn không cần phải đặt bất kỳ thứ gì bên trong src, chỉ cần có tài nguyên bên trong này.

@Component không bắt buộc.

Lớp này được biên dịch trong thời gian chạy. Xem:

org.crsh.lang.impl.java.JavaCompiler#compileCommand 

Có bất kỳ yêu cầu tiêm phụ thuộc nào cần được xem xét tương ứng với khởi tạo lười.

+1

Cảm ơn !! :) wow –

+0

Bạn được chào đón! –

Các vấn đề liên quan