这个问题是关于以可移植的方式读取REST服务中的配置的正确方法,例如应该运行在Thornail 2.4.0和Wildfly 15上。
这是索恩泰尔建议的原始实现
@Inject
@org.wildfly.swarm.spi.runtime.annotations.ConfigurationValue("swarm.port.offset")
private Optional<String> portOffset;
这在WildFly 15中不起作用,因此我们用以下方式更改了此代码:
@Inject
@ConfigProperty(name="swarm.port.offset")
private Optional<String> portOffset;
只要设置了系统属性,它就能很好地工作。
然而,回到Thorntail,它会生成以下异常:
org.jboss.weld.exceptions.部署异常:WELD-001408:类型的未满足的依赖项可选的限定符@ConfigProperty
在注入点[BackedAnNotatedField]@Inject@ConfigProperty私有com.my-company.core.internal.util.ZookeeperRegistry.port偏移
在com.my-company.core.internal.util.ZookeeperRegistry.port偏移(ZookeeperRegistry.java: 0)WELD-001475:以下bean按类型匹配,但没有一个具有匹配的限定符:-生产者方法[可选]与限定符[@any@ConfigurationValue]声明为[[UnbackedAnNotatedAct]@ConfigurationValue@依赖@生成org.wildfly.swarm.container.runtime.cdi.ConfigurationValueProducer.produceOptionalConfigValue(InjsetPoint)]
非常感谢。
代码最终在两种环境中运行,只需一个pom文件。
我在下面详述所采取的解决办法。
>
在maven依赖方面,我包括了这个依赖,不管我们是为Thornail还是为WildFLy构建
<dependency>
<groupId>org.eclipse.microprofile.config</groupId>
<artifactId>microprofile-config-api</artifactId>
</dependency>
实际版本使用Eclipse微配置文件的依赖管理解决:
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.eclipse.microprofile</groupId>
<artifactId>microprofile</artifactId>
<version>2.2</version>
<type>pom</type>
<scope>import</scope>
</dependency>
...
</dependencyManagement>
文件移植性 幸运的是,对于许多在不同操作系统下工作的用户,Subversion命令行程序的行为方式几乎完全一致,如果你知道在一个平台上如何运行svn,你也就学会了在其他平台上运行。 然而,这一点在本软件的其他几类地方或Subversion保持的实际文件并不一定都是正确的。例如,在一个Windows系统,“文本文件”的定义与Linux环境下的类似,但是也有区别—行结束的字符串并不相同。当然也有其他的
WebAssembly的二进制格式是被设计成可在不同操作系统与指令集上高效执行的,无论在Web或非Web环境中。 对高效执行的设想 尽管执行环境是有条件的,本地的,不确定的,也不要向WebAssembly提供下述特性。有些情况下为了WebAssembly模块执行,也许不得不模拟一些宿主硬件或操作系统不提供的特性,让它们似乎被支持。这种情况将会导致糟糕的性能。 随着WebAssembly的标准化推进
2.2.1.可移植性 Linux可以轻松地移植到各种不同的硬件平台上。有了Linux做硬件抽象层,Android就不必为不同硬件的兼容性而劳心。Linux 的绝大多数底层代码都是用可移植的 C 代码编写,因此第三方开发者可以将 Android 移植到很多不同的设备上。
"C语言结合了汇编的强大功能和可移植性" -- 无名氏,暗指比尔.萨克。 可移植代码的好处是有目共睹的。这一节将阐述一些编写可移植代码的指导原则。这里"可移植的"是指一个源码文件能够在不同机器上被编译和执行,其 前提仅仅是在不同平台上可能包含不同的头文件,使用不同的编译器开关选项罢了。头文件包含的#define和typedef可能因机器而异。一般 来说,一个新"机器"是指一种不同的硬件,一种不同的
问题内容: 假设我主要是Linux用户,但是我正在Go中开发一个我希望成为跨平台的应用程序。我到处搜寻,但似乎找不到能满足以下条件的信息: 如果我在amd64 Ubuntu系统上使用二进制文件,那么它也可以在 其他任何人的 64位Ubuntu / Debian系统上运行吗? 我如何使用它来构建一个x86_64二进制文件,该二进制文件也将在32位Debianlikes上开箱即用? 如果必须使用Win
我引用Herbert Schildt第3章数据类型、变量和数组: 基元类型表示单个值,而不是复杂的对象。虽然Java在其他方面是完全面向对象的,但基元类型不是。这种效率的原因。制作基元类型会使性能降低太多。 基元类型被定义为具有显式范围和数学行为。像C、C++这样的语言允许整数的大小根据执行环境的指令而变化。然而,Java不同。由于Java的可移植性要求,所有数据类型都有一个强定义的范围。例如,i