我正在研究开源库的度量单位,我使用的maven依赖项是:
<dependency>
<groupId>tec.units</groupId>
<artifactId>unit-ri</artifactId>
<version>1.0.2</version>
</dependency> 它实现了JSR-363。当我尝试使用它时,如下所示:
ServiceProvider provider = ServiceProvider.current();结果是:
Exception in thread "main" java.lang.IllegalStateException: No measurement ServiceProvider found.有人能告诉我出了什么问题吗?
发布于 2017-07-24 19:42:53
在Netbeans IDE中打开bean时,我在使用java bean表单中的度量库时遇到了同样的问题。这个技巧对我很有效:
import javax.measure.spi.ServiceProvider;
import tec.units.ri.spi.DefaultServiceProvider;
private ServiceProvider serviceProvider;
try {
serviceProvider = ServiceProvider.current();
} catch ( IllegalStateException e ) {
serviceProvider = new DefaultServiceProvider();
}发布于 2017-04-24 17:02:09
因此,我研究了类ServiceProvider以了解current()方法的作用:
您可以看到它使用ServiceLoader返回值。如果您查看ServiceLoader的文档,您将看到您需要一个配置文件:
https://docs.oracle.com/javase/6/docs/api/java/util/ServiceLoader.html
服务提供者通过在META-INF/
资源目录中放置一个提供者配置文件来标识服务提供者。文件名是服务类型的完全限定二进制名。该文件包含具体提供程序类的完全限定二进制名的列表,每行一个。每个名称周围的空格和制表符以及空行将被忽略。注释字符是'#‘('\u0023',数字符号);在每行中,第一个注释字符后面的所有字符都被忽略。该文件必须以UTF-8编码。
发布于 2017-04-25 10:51:24
适用于可能需要使用此库的所有人。这很奇怪,但在我将maven依赖项版本从1.02更改为1.01之后,没有其他更改,它工作得很好。所以,这应该是这个版本的一个bug ...
https://stackoverflow.com/questions/43583267
复制相似问题