在我的项目中声明的依赖项之一具有传递依赖性'com.google.guava:guava:15.0'.但是我在WAS/Weblogic上部署的应用程序由于已修复的CDI问题而无效'com.google.guava:guava:15.0:cdi1.0'.(相同版本,但有分类器)我需要告诉gradle在构建和打包过程中使用这个jar.我试图弄清楚如何使用jar特定的版本分类器来提取这种传递依赖.
试过以下方法:
compile 'com.google.guava:guava:15.0:cdi1.0'.但两个罐子都包含在最终的WAR中.明确添加了依赖关系并定义了解决策略:
configurations.all {
resolutionStrategy {
force 'com.google.guava:guava:15.0:cdi1.0'
}
}
Run Code Online (Sandbox Code Playgroud)
即使这样也行不通.
定义了检查和更改版本的解决方案策略.
configurations.all {
resolutionStrategy.eachDependency { DependencyResolveDetails details ->
if (details.requested.group + ":" + details.requested.name == 'com.google.guava:guava') {
details.useVersion "15.0:cdi1.0"
//details.useTarget "com.google.guava:guava:15.0:cdi1.0"
}
}
}
Run Code Online (Sandbox Code Playgroud)
即使这样也行不通.
需要您就如何解决此问题提出建议.
我们创建了一个包含多个服务的docker compose文件.这些服务的映像使用"build"配置选项在运行时构建.相应的Dockerfile在相应的目录中给出.
示例docker撰写文件...
version: '3'
services:
db2server:
build: ./db2server
ports:
- "50005:50000"
command: ["db2start"]
appruntime:
build: ./appruntime
depends_on:
- db2server
Run Code Online (Sandbox Code Playgroud)
此docker compose文件与docker-compose命令一起使用.
db2server&appruntime目录中存在的Dockerfile构建的但是当我们尝试在docker swarm中部署它时,会抛出以下错误......
docker stack deploy -c /home/docker/docker-compose.yml app
Ignoring unsupported options: build
Creating network app_default
Creating service app_db2server
failed to create service app_db2server: Error response from daemon: rpc error: code = InvalidArgument desc = ContainerSpec: image reference must be provided
Run Code Online (Sandbox Code Playgroud)
看起来在docker swarm中的堆栈部署期间忽略了'build'配置选项.
我们如何在docker swarm中的docker compose文件中部署这些服务(使用构建选项).
我们使用Jackson jax-rs XML内容提供程序在我们基于jax-rs的REST API项目中处理XML内容类型.在序列化POJO列表时,我们需要从POJO中的字段动态设置xml元素名称.
public class ResponsePOJO {
@JacksonXmlProperty
@JacksonXmlElementWrapper(useWrapping = false)
private List<Message> message = new ArrayList<Message>();
}
public class Message {
private String type; // "Error" or "Warning"
private String msg; // The actual message
}
Run Code Online (Sandbox Code Playgroud)
默认Jackson序列化XML:
<ResponsePOJO>
<message>
<type>Error</type>
<msg>Some random error message</msg>
</message>
<message>
<type>Warning</type>
<msg>Some random warning message</msg>
</message>
</ResponsePOJO>
Run Code Online (Sandbox Code Playgroud)
我们的要求,即将类型设置为XML元素名称.
<ResponsePOJO>
<Error>
<msg>Some random error message</msg>
</Error>
<Warning>
<msg>Some random warning message</msg>
</Warning>
</ResponsePOJO>
Run Code Online (Sandbox Code Playgroud)
为了实现这一点,我们以下列方式编写了一个自定义XML序列化程序:
public class MessageListSerializer extends
JsonSerializer<List<Message>> {
@Override
public void …Run Code Online (Sandbox Code Playgroud) 类似于JAXB生成给定XSD的JAXB类,Jackson提供了任何实用程序来从XSD或JSON生成Jackson类。
JAXB类生成器已经为定义的XSD模式生成了一组类。例如,对于多态类型,JAXB具有以下注释,用于基于XML元素名称来标识名称。
@XmlElements({
@XmlElement(name = "Dog", type = Dog.class),
@XmlElement(name = "Cat", type = Cat.class)
})
protected List<Animal> animal;
Run Code Online (Sandbox Code Playgroud)
是否可以在Jackson中创建类似的类。即基于XML元素名称来标识类型。