似乎你做的一切都很好,你所需要的只是创建正确的 pom.xml,它将包括你的项目的 jars 和 context.properties。我正在创建一个包含必要文件的工件。这是我的 pom 的一个例子:
<copy todir="${project.build.outputDirectory}">
<fileset dir="${basedir}/My_Job_Main/" includes="*.jar"/>
</copy>
<jar destfile="${project.build.outputDirectory}/myJar.jar">
<zipfileset dir="${basedir}/My_Job_Main/"
includes="**/my_job_main/**"
excludes="**/src/**,**/items/**"/>
</jar>
<zip destfile="${basedir}/target/my.artifact.id-1.0-SNAPSHOT.jar">
<zipgroupfileset dir="${project.build.outputDirectory}" includes="*.jar"/>
</zip>
然后将此工件作为依赖项添加到您的 ear 文件中。
在您将运行此作业的类中,您应该简单地导入作业类并执行函数:
My_Job_Main job = new My_Job_Main();
job.runJobInTOS(params);//params -> is the String array of context variables
解决方案 2:
但是这个解决方案是我不喜欢的。因此,我建议在导出作业时导出作业并动态加载它们,而无需使用 Maven 进行部署。它可以让您灵活地更改作业,而无需重新启动服务器。
这是一个动态加载作业 jar 文件并执行它们的代码示例:
URL [] urls = new URL[length];
File jar = new File("path_to_jo_jar_file");
urls[0] = jar.toURI().toURL();
String params[] = new String[length];
params[0] = "--context=Default";
params[1] = "--context_param";
params[2] = "paramName=paramValue";
Class<?>[] params_type = new Class[]{String[].class};
URLClassLoader child = new URLClassLoader(urls , this.getClass().getClassLoader());
Class classToLoad = Class.forName( "my_job_main.My_Job_Main", true, child);
Method method = classToLoad.getDeclaredMethod ("runJobInTOS", params_type);
method.setAccessible(true);
Object instance = classToLoad.newInstance();
method.invoke(instance, new Object[]{ args } );
希望这会有所帮助。如果您有更多问题,请在 cmets 发帖。