首先:对不起标题,但我真的不确定如何解决这个问题。
我有一个maven项目,里面有几个模块。 所有模块都非常简单,因为它们为主Web-App模块提供了一些特殊的逻辑类。 这些逻辑类在运行时由spring注入。
以下是我的Maven设置(为简单起见而抽象)
现在问题: 算法模块有一个资源 - 在这种情况下是一个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 - 所以应该没有问题,至少这就是我的想法。
有人可以指出我的错误吗?如果没有一些棘手的解决方法,这是不可能的?
答案 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资源目录。
这对我来说没问题,因为所有模块都可以保留自己的资源,而且在添加新资源或新模块时不需要配置任何东西。