我们使用immutables框架来生成所有DTO.现在我们想用mapstruct将这些对象映射到另一个.但是生成的DTO是不可变的,没有setter,也没有构造函数,对应于构建器模式.它们仅通过static builder()
-method 访问的相应构建器填充.
我们试图将DTO1映射到DTO2.Builder,如果mapstruct能识别Builder中的setter但这些没有void返回类型但返回Builder本身以进行流畅的连接,那么它将起作用.
所以这是示例的代码.
我们有两个接口
@Value.Immutable
public interface MammalDto {
public Integer getNumberOfLegs();
public Long getNumberOfStomachs();
}
Run Code Online (Sandbox Code Playgroud)
和
@Value.Immutable
public interface MammalEntity {
public Long getNumberOfLegs();
public Long getNumberOfStomachs();
}
Run Code Online (Sandbox Code Playgroud)
然后我们有了maptruct的Mapper接口:
@Mapper(uses = ObjectFactory.class)
public interface SourceTargetMapper {
SourceTargetMapper MAPPER = Mappers.getMapper( SourceTargetMapper.class );
ImmutableMammalEntity.Builder toTarget(MammalDto source);
}
Run Code Online (Sandbox Code Playgroud)
要使用mapstruct来查找Builder,我们需要一个Factory:
public class ObjectFactory {
public ImmutableMammalDto.Builder createMammalDto() {
return ImmutableMammalDto.builder();
}
public ImmutableMammalEntity.Builder createMammalEntity() {
return ImmutableMammalEntity.builder();
}
}
Run Code Online (Sandbox Code Playgroud)
为了生成代码,编译器插件被指示使用两个注释处理器:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.6.1</version>
<configuration> …
Run Code Online (Sandbox Code Playgroud) 我有以下(简化)文件夹结构:
pom.xml (with correct scm)
src/folder1
src/folder2
Run Code Online (Sandbox Code Playgroud)
folder1和folder2各自包含一个test.txt文件.folder1已提交,folder2尚未受版本控制.
我尝试做的是将文件src/folder2/test.txt添加到版本控制.
如果我执行
mvn scm:add -Dbasedir=${project.basedir}/src -Dincludes=**/folder2/*
Run Code Online (Sandbox Code Playgroud)
我收到这条消息:
[ERROR] The svn command failed.
[ERROR] Command output:
[ERROR] svn: 'src/folder2' is not a working copy
Run Code Online (Sandbox Code Playgroud)
因为模式**/folder2/*不包含我试图首先添加文件夹的文件夹:
mvn scm:add -Dbasedir=${project.basedir}/src -Dincludes=**/folder2/
Run Code Online (Sandbox Code Playgroud)
相同的错误消息.同
mvn scm:add -Dbasedir=${project.basedir}/src -Dincludes=**/folder2
Run Code Online (Sandbox Code Playgroud)
(即没有斜线斜线)我得到了消息
"执行SCM命令时出现异常.您必须至少提供一个文件/目录才能添加"
与-Dincludes = folder2相同,-Dincludes = folder2 /甚至当我完全删除"包含"时.
在尝试将文件添加到新目录之前,如何让maven-scm-plugin首先添加文件夹?
我用Mam 2.2.1和Maven 3.0.4用scm-Plugin Versions 1.4(我们项目中的实际版本)和1.6(最新版本)测试了这个.
我arraydeque
用来创建项目列表并传递参数(项目是类)
ArrayDeque<Item> Items= new ArrayDeque<Item>();
Run Code Online (Sandbox Code Playgroud)
但我有java ArrayDeque的问题.也许有办法一次添加多个元素.例如.我想补充的同时TableType
,并colourOfTable
为ArrayDeque.
在c ++中我可以用它完成它
vector<Item>Items
Items.push_back(Item("CoffeeTable", "brown"));
Run Code Online (Sandbox Code Playgroud)
我想用Java做同样的事情.而不是为每个项目创建一个新的obj,如:
ArrayDeque<Item> Items = new ArrayDeque<Item>();
Item obj = new Item("CoffeTable", "brown");
Items.add(obj);
Item obj1 = new Item("DinnerTable", "Black");
Items.add(obj1);
Run Code Online (Sandbox Code Playgroud)
但obj
我并没有想要同时添加 "CoffeTable", "brown"
一个代码行(如c ++示例中)到Items
数组中.
我尝试过类似的东西
ArrayDeque<Item> Items= new ArrayDeque<Item>();
Items.add(Items("CoffeTable", "brown"));
Run Code Online (Sandbox Code Playgroud)
但是在创建create方法'Items(String,String)'时出现错误
我正在尝试以批处理模式从命令行运行maven release插件,以获得一个多模块项目,该项目具有使用分类器部署到maven存储库的依赖项.
release:prepare在不处于批处理模式时正常工作,并提示所有未解析的快照依赖项,包括具有分类器且发布成功完成的快照依赖项.
当我查看release.properties文件时,我看到......
常规依赖关系被识别为
project.rel.groupIdXYZ:artifactIdXYZ=2.0.3.4
project.dev.groupIdXYZ:artifactIdXYZ=2.0.3.4-SNAPSHOT
Run Code Online (Sandbox Code Playgroud)
分类器依赖关系标识为
dependency.groupIdABC:artifactIdABC.release=2.0.3.4
dependency.groupIdABC:artifactIdABC.development=2.0.3.4-SNAPSHOT
Run Code Online (Sandbox Code Playgroud)
没有实际的分类器ID.
现在我通过命令行尝试使用命令行,如...
mvn --batch-mode -P release,nexus -Dtag=rm2.0.3.4 -Dproject.rel.groupIdXYZ:artifactIdXYZ=2.0.3.4 -Dproject.dev.groupIdXYZ:artifactIdXYZ=2.0.3.4-SNAPSHOT -Ddependency.groupIdABC:artifactIdABC.development=2.0.3.4-SNAPSHOT -Ddependency.groupIdABC:artifactIdABC.release=2.0.3.4 -DreleaseVersion=2.0.3.4 -DdevelopmentVersion=2.0.3.4-SNAPSHOT -DdryRun=true release:prepare
Run Code Online (Sandbox Code Playgroud)
得到
Can't release project due to non released dependencies :
groupIdABC:artifactIdABC:jar:classifierIdABC:2.0.3.3-SNAPSHOT:compile
Run Code Online (Sandbox Code Playgroud)
我已经验证了分类器工件在我当地的maven repo我们的公司中央maven repo.我已经尝试将分类器工件指定为
-Dproject.rel.groupIdABC:artifactIdABC:jar:classifierIdABC=2.0.3.4
Run Code Online (Sandbox Code Playgroud)
仍然是同样的错误.
任何能够从命令行运行它的指针都将受到赞赏.
我试着模拟一些maven课程.
我知道我可以用地图模拟一个接口或一个类
def projectMock = [ getBasedir: { new File("") } ] as MavenProject
Run Code Online (Sandbox Code Playgroud)
但是如何模拟接收参数的方法?
我曾试图使用"MockFor":
def artifactFactoryMockContext = new MockFor(ArtifactFactory)
artifactFactoryMockContext.demand.createArtifact(1) {groupId, artifactId, version, classifier, type -> artifact }
def artifactFactory = artifactFactoryMockContext.proxyInstance()
Run Code Online (Sandbox Code Playgroud)
但是我得到了UnsupportedOperationException.我在这做错了什么?
在 Cucumber 2 中,正则表达式表示为(.*)
获取胶水代码的参数。Cucumber 3的表达式文档说“您可以使用正则表达式或 Cucumber 表达式”。但遗憾的是它没有提到语法。
在 Cucumber 3 和 4 中()
表示可选文本,相当于(?:)
在 Cucumber 2 中。
何时()
为可选文本保留如何在 Cucumber 3 中定义正则表达式?作为{.*}
?
我们使用许多具有单个值的值对象。对于(反)序列化,我们将Jackson与kotlin模块一起使用。
Kotlin中的示例值对象:
data class MyValueObject(val value: String)
Run Code Online (Sandbox Code Playgroud)
或作为Java
class MyValueObject {
private String value;
public MyValueObject(String value) { this.value = value; }
public String getValue() { return value; }
}
Run Code Online (Sandbox Code Playgroud)
这些值对象必须被序列化和反序列化,并且应该被序列化为“仅值”,例如。"theValue"
代替"{"value":"theValue"}"
。
我想避免为数十个值对象编写自定义序列化器/反序列化器。
我知道用于序列化@JsonValue
可以用来实现以上内容。
data class MyValueObject(@JsonValue val value: String)
Run Code Online (Sandbox Code Playgroud)
但是JSON““ theValue””(上述序列化的String-Literal)不能反序列化为MyValueObject
。它导致以下异常:
com.fasterxml.jackson.databind.exc.MismatchedInputException:
Cannot construct instance of `[...].MyValueObject` (although at least one Creator exists):
no String-argument constructor/factory method to deserialize from String value ('test')
at [Source: (String)""test""; line: 1, …
Run Code Online (Sandbox Code Playgroud) 在Java中是否有一种优雅的流媒体方式可以说"如果值存在,则将此可选映射到具有计算值的另一个可选,否则返回空可选"?
我想到了类似的东西:
Optional<Float> amount = ...;
Optional<MonetaryAmount> myAmount = amount
.map(theAmount -> FastMoney.of(theAmount, "EUR")).orElse(Optional.empty());
Run Code Online (Sandbox Code Playgroud)
但这是不可能的.
我提出的解决方案有点冗长而不像流媒体:
Optional<Float> amount = ...;
Optional<MonetaryAmount> myAmount = amount.isPresent() ?
Optional.of(FastMoney.of(amount.get(), "EUR")) : Optional.empty();
Run Code Online (Sandbox Code Playgroud) 我们使用注释处理框架(Immutables)从接口生成Java类.
现在我必须从kotlin类访问这些生成的类.虽然在Java中这很好用,但Kotlin编译器却找不到它们.
这是maven配置:
<plugin>
<groupId>org.jetbrains.kotlin</groupId>
<artifactId>kotlin-maven-plugin</artifactId>
<version>${kotlin.version}</version>
<executions>
<execution>
<id>compile</id>
<phase>compile</phase>
<goals>
<goal>compile</goal>
</goals>
<configuration>
<sourceDirs>
<sourceDir>${project.basedir}/src/main/java</sourceDir>
</sourceDirs>
</configuration>
</execution>
<execution>
<id>test-compile</id>
<phase>test-compile</phase>
<goals>
<goal>test-compile</goal>
</goals>
<configuration>
<sourceDirs>
<sourceDir>${project.basedir}/src/test/java</sourceDir>
</sourceDirs>
</configuration>
</execution>
</executions>
</plugin>
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<executions>
<!-- Replacing default-compile as it is treated specially by maven -->
<execution>
<id>default-compile</id>
<phase>none</phase>
</execution>
<!-- Replacing default-testCompile as it is treated specially by maven -->
<execution>
<id>default-testCompile</id>
<phase>none</phase>
</execution>
<execution>
<id>java-compile</id>
<phase>compile</phase>
<goals> <goal>compile</goal> </goals>
</execution>
<execution>
<id>java-test-compile</id>
<phase>test-compile</phase>
<goals> <goal>testCompile</goal> </goals> …
Run Code Online (Sandbox Code Playgroud) 我正在尝试将流转换为 kotlin 中类型正确的列表。对于这种情况,kotlin 提供了扩展方法Stream.toList()。该方法位于kotlin.streams中。IDE (IntelliJ) 不允许在流上调用此方法。我是否必须添加特殊的依赖项或者它应该成为标准库的一部分?我使用的是 Maven,并且依赖于 kotlin-stdlib-jdk8 1.2.10。
注意:流是从库函数返回的,所以我必须使用它。请不要回答“在 kotlin 中你不使用流......”。
java ×5
kotlin ×3
maven ×2
add ×1
arraydeque ×1
builder ×1
collections ×1
command-line ×1
cucumber ×1
cucumber-jvm ×1
elements ×1
groovy ×1
immutability ×1
jackson ×1
mapping ×1
mapstruct ×1
mocking ×1
optional ×1
svn ×1
testing ×1