Среда разработки агента 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);
}
}
}