Java代理开发框架 – Eclipse和Maven集成
我创建了一个使用JADE框架作为依赖项的maven项目,但是这个框架需要不同的命令来执行jar而不是普通的java应用程序。
建立:
javac –classpath Class_name.java
跑:
java –classpath jade.Boot :
其中是
package_name.Class_name
要么
java –cp lib\jade.jar jade.Boot [options] [AgentSpecifierlist]
是否可以使用maven插件构建一个可运行的jar,所以我只输入java -jar myjar.jar
而不是上面的命令?
mvn eclipse:eclipse
命令在编辑pom.xml文件后更改eclipse项目的构建参数吗?
没有任何这样的插件可用于JADE,因为它没有广泛使用的框架,任何人都没有费心为它开发插件。 但是有一种解决方法可以按常规方式运行它,但这只有在您已经知道
名称的情况下才有效。 你可以做的是编写一个扩展Thread
的类,并从该Thread
的run()
方法通过传递
作为参数来调用JADE框架代理。 请参阅下面的示例。
jadeBootThread.java
public class jadeBootThread extends Thread { private final String jadeBoot_CLASS_NAME = "jade.Boot"; private final String MAIN_METHOD_NAME = "main"; //add the : 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(); } } }
现在,您可以通过使用eclipse插件等创建runnable jar文件,从main方法或任何其他方式调用此线程。
更好的解决方案:
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); } } }