Я создал проект maven с JADE framework как зависимость, но для этой фреймворка нужны разные команды для выполнения jar, чем обычные 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]
Можно ли создать runnable jar с помощью плагинов maven, поэтому я просто java -jar myjar.jar
вместо команды выше?
Будет ли mvn eclipse:eclipse
изменить параметры сборки команды eclipse проекта eclipse после редактирования файла pom.xml?
Для JADE такого плагина нет, потому что он не широко используется, и никто не потрудился разработать для него плагин. Но есть обходной путь, чтобы запустить его обычным способом, но это будет работать, только если вы уже знаете имена <fully-qualified-agent-class>
. что вы можете сделать, это написать класс, который расширяет Thread
и из этого метода run()
Thread
вызывает агент среды 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();
}
}
}
Теперь вы можете вызвать этот поток из своего основного метода или любым другим способом, создав файл runnable 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);
}
}
}