Среда разработки агента Java - интеграция Eclipse и Maven

Я создал проект maven с JADE- фреймворком в качестве зависимости, но для этого фреймворка требуются команды, отличные от обычных java-приложений.

Телосложение:

javac –classpath <JADE-classes> Class_name.java

Бежать:

java –classpath <JADE-classes> jade.Boot <agent-local-name>:<fully-qualified-agent-class>

куда <fully-qualified-agent-class> является package_name.Class_name

или же

java –cp lib\jade.jar jade.Boot [options] [AgentSpecifierlist]

Можно ли построить работающую банку с помощью плагинов Maven, поэтому я просто набираю java -jar myjar.jar вместо команды выше?

Было бы mvn eclipse:eclipse команда изменить параметры сборки проекта eclipse после редактирования файла pom.xml?

2 ответа

Решение

Для JADE такого плагина нет, потому что он не является широко используемым фреймворком, и никто не удосужился разработать плагин для него. Но есть обходной путь, чтобы запустить его обычным способом, но это будет работать, только если вы уже знаете свой <fully-qualified-agent-class> имена. что вы можете сделать, это написать класс, который расширяет Thread и из этого Thread"s run() метод вызывает агент платформы JADE, передавая <fully-qualified-agent-class> в качестве аргументов. Обратитесь к примеру ниже.

jadeBootThread.java

public class jadeBootThread extends Thread {

private final String jadeBoot_CLASS_NAME = "jade.Boot";

private final String MAIN_METHOD_NAME = "main";

//add the <agent-local-name>:<fully-qualified-agent-class> name here;
// you can add more than one by semicolon separated values.
private final String ACTOR_NAMES_args = "Agent1:com.myagents.agent1";

private final String GUI_args = "-gui";

private final Class<?> secondClass;

private final Method main;

private final String[] params;

public jadeBootThread() throws ClassNotFoundException, SecurityException, NoSuchMethodException {
    secondClass = Class.forName(jadeBoot_CLASS_NAME);
    main = secondClass.getMethod(MAIN_METHOD_NAME, String[].class);
    params = new String[]{GUI_args, ACTOR_NAMES_args};
}

@Override
public void run() {
    try {
        main.invoke(null, new Object[]{params});
    } catch (IllegalAccessException | IllegalArgumentException | InvocationTargetException ex) {
       ex.printStacktrace();
    }

}
}

Теперь вы можете вызывать этот поток из вашего основного метода или любым другим способом, создавая исполняемый файл JAR с плагином eclipse и т. Д.

Лучшее решение для этого:

public class Example03  {

public static void main(String[] args){

    String host;
    int port;
    String platform = null; //default name
    boolean main = true;

    host = "localhost";
    port = -1;          //default-port 1099

    Runtime runtime = Runtime.instance();
    Profile profile = null;
    AgentContainer container = null;

    profile = new ProfileImpl(host, port, platform, main);

    // create container
    container = runtime.createMainContainer(profile);

    // create the agents
    try {

        AgentController agent1 = container.createNewAgent(
                    "Agent1", 
                   routing.TransportAgent.class.getName(), 
                    args);
        AgentController agent2 = container.createNewAgent(
                "Agent2", 
               routing.TransportAgent.class.getName(), 
                args);
         // create the GUI
        AgentController rma = container.createNewAgent("rma", "jade.tools.rma.rma", null);

        // start the agents
        agent1.start();
        agent2.start();
        rma.start();
    } catch(StaleProxyException e) {
        throw new RuntimeException(e);
    }           
}
}
Другие вопросы по тегам