Maven + Spring:使用spring

时间:2017-06-27 07:04:34

标签: java spring maven resources

首先:对不起标题,但我真的不确定如何解决这个问题。

我有一个maven项目,里面有几个模块。 所有模块都非常简单,因为它们为主Web-App模块提供了一些特殊的逻辑类。 这些逻辑类在运行时由spring注入。

以下是我的Maven设置(为简单起见而抽象)

  • core-module(为所有模块提供接口和基本类)
  • algorithm-modules(提供特殊算法的模块,实现代码模块接口之一)
  • web-app-module(Spring Web App,它使用自身注册为@Component的算法,依赖于核心和算法模块)

现在问题: 算法模块有一个资源 - 在这种情况下是一个python脚本 - 我想在系统Python解释器上执行。 (资源/ pythonscript.py)

所有可用的算法类(实现度量标准接口)都由spring注入到web-apps控制器中:

@Autowired
List<Metric> metrics;

稍后用户选择他想要执行的算法:

metric.performCalculations(dataset);

这将执行稍后尝试从modules资源目录运行python脚本的逻辑:

URL url = NXBetweennessCentrality.class.getResource("bc/betweenness_centrality.py");
logger.debug("URL: {}", url); //=> null

我试过了sevaral组合:

class.getResourceAsStream(resourcePath)
class.getClassLoader().getResources("")

基本上来自How do I load a file from resource folder?但是我无法加载此资源。

我在尝试访问maven dependencys项目(Use a dependency's resources?)的资源时听到了问题,但在我的情况下,我从拥有该资源的包中执行Class - 所以应该没有问题,至少这就是我的想法。

有人可以指出我的错误吗?如果没有一些棘手的解决方法,这是不可能的?

3 个答案:

答案 0 :(得分:0)

如果您运行该类独立,那么它应该工作。否则,如果您使用war运行webapp,那么您的资源也应该捆绑在战争中。由于您有多个模块,因此您可能将具有python资源的模块打包为JAR,并且可以将该依赖项添加到webapp模块。此时,呈现JAR模块的资源不会被捆绑在战争中。

答案 1 :(得分:0)

例如:

a.b.c.NXBetweennessCentrality.class.getResource("");

  

这意味着NXBetweennessCentrality packge
  WEB-INF /类/ A / B / C

你的代码中的

url为null

URL url =a.b.c.NXBetweennessCentrality.class.getResource("bc/betweenness_centrality.py");

  


  WEB-INF /类/ A / B / C / BC / betweenness_centrality.py

如果您的py文件位于资源

你可以尝试 root&#34; /&#34;您的网络应用程序中的路径

getResource("/bc/betweenness_centrality.py");

如果我错了,请纠正我,谢谢。

答案 2 :(得分:0)

所以我设法使用https://stackoverflow.com/a/6448530/760952

中的maven脚本使其工作

现在,在打包战争之前,所有子模块的所有资源都会被复制到web-app资源目录。

这对我来说没问题,因为所有模块都可以保留自己的资源,而且在添加新资源或新模块时不需要配置任何东西。