我有一个Maven项目,其中一些json模式被整理成这样的文件夹:
src / main / resources / schema / json / modules / moduleA / typesA.json src / main / resources / schema / json / modules / moduleA / typeA.json
因此,两个架构都位于同一文件夹中。
types模式链接到typeA模式,如下所示:
"$ref": "resource:/schema/json/modules/moduleA/typeA.json"
因为我想为所有模式生成Java POJOS,所以我使用jsonschema2pojo-maven-plugin这样的
<!-- Code generation out of JsonSchema files -->
<plugin>
<groupId>org.jsonschema2pojo</groupId>
<artifactId>jsonschema2pojo-maven-plugin</artifactId>
<version>0.5.1</version>
<configuration>
<skip>false</skip>
<sourceDirectory>${basedir}/src/main/resources/schema/json/modules/</sourceDirectory>
<outputDirectory>${basedir}/src/gen/java/json</outputDirectory>
<removeOldOutput>true</removeOldOutput>
<annotationStyle>none</annotationStyle>
<includeGetters>true</includeGetters>
<includeSetters>true</includeSetters>
<useCommonsLang3>true</useCommonsLang3>
<useLongIntegers>true</useLongIntegers>
<includeJsr303Annotations>true</includeJsr303Annotations>
<includeAdditionalProperties>false</includeAdditionalProperties>
<includeHashcodeAndEquals>false</includeHashcodeAndEquals>
<dateTimeType>java.time.LocalDateTime</dateTimeType>
<targetPackage>com.all.my.modules</targetPackage>
</configuration>
<executions>
<execution>
<phase>generate-sources</phase>
<goals>
<goal>generate</goal>
</goals>
</execution>
</executions>
</plugin>
但是当我运行“ mvn clean compile”时,它总是失败并显示以下堆栈跟踪:
原因:java.lang.IllegalArgumentException:无法从类路径读取内容,找不到文件:resource:/schema/json/modules/moduleA/typeA.json 在org.jsonschema2pojo.ContentResolver.resolveFromClasspath(ContentResolver.java:94) 在org.jsonschema2pojo.ContentResolver.resolve(ContentResolver.java:73) 在org.jsonschema2pojo.SchemaStore.create(SchemaStore.java:58) 在org.jsonschema2pojo.SchemaStore.create(SchemaStore.java:128) 在org.jsonschema2pojo.rules.SchemaRule.apply(SchemaRule.java:59) 在org.jsonschema2pojo.rules.SchemaRule.apply(SchemaRule.java:30) 在org.jsonschema2pojo.rules.ArrayRule.apply(ArrayRule.java:81) 在org.jsonschema2pojo.rules.ArrayRule.apply(ArrayRule.java:37) 在org.jsonschema2pojo.rules.TypeRule.apply(TypeRule.java:113) 在org.jsonschema2pojo.rules.TypeRule.apply(TypeRule.java:40) 在org.jsonschema2pojo.rules.SchemaRule.apply(SchemaRule.java:73) 在org.jsonschema2pojo.rules.SchemaRule.apply(SchemaRule.java:30) 在org.jsonschema2pojo.rules.PropertyRule.apply(PropertyRule.java:75) 在org.jsonschema2pojo.rules.PropertyRule.apply(PropertyRule.java:43) 在org.jsonschema2pojo.rules.PropertiesRule.apply(PropertiesRule.java:70) 在org.jsonschema2pojo.rules.PropertiesRule.apply(PropertiesRule.java:38) 在org.jsonschema2pojo.rules.ObjectRule.apply(ObjectRule.java:119) 在org.jsonschema2pojo.rules.ObjectRule.apply(ObjectRule.java:70) 在org.jsonschema2pojo.rules.TypeRule.apply(TypeRule.java:90) 在org.jsonschema2pojo.rules.TypeRule.apply(TypeRule.java:40) 在org.jsonschema2pojo.rules.SchemaRule.apply(SchemaRule.java:73) 在org.jsonschema2pojo.rules.SchemaRule.apply(SchemaRule.java:66) 在org.jsonschema2pojo.rules.SchemaRule.apply(SchemaRule.java:30) 在org.jsonschema2pojo.SchemaMapper.generate(SchemaMapper.java:92) 在org.jsonschema2pojo.Jsonschema2Pojo.generateRecursive(Jsonschema2Pojo.java:134) 在org.jsonschema2pojo.Jsonschema2Pojo.generateRecursive(Jsonschema2Pojo.java:136) 在org.jsonschema2pojo.Jsonschema2Pojo.generateRecursive(Jsonschema2Pojo.java:136) 在org.jsonschema2pojo.Jsonschema2Pojo.generateRecursive(Jsonschema2Pojo.java:136) 在org.jsonschema2pojo.Jsonschema2Pojo.generateRecursive(Jsonschema2Pojo.java:136) 在org.jsonschema2pojo.Jsonschema2Pojo.generate(Jsonschema2Pojo.java:75) 在org.jsonschema2pojo.maven.Jsonschema2PojoMojo.execute(Jsonschema2PojoMojo.java:788) 在org.apache.maven.plugin.DefaultBuildPluginManager.executeMojo(DefaultBuildPluginManager.java:132) ...另外20个
但是根据classpathRefs.json和jsonschema2pojo#ref,这应该是可能的。 当我尝试通过运行mvnDebug来调试插件执行时,有时会奏效,有时却无法奏效。那么这是一个已知问题吗?仅使用
"$ref": "typeA.json"
它始终有效。但这对我来说只是一个临时解决方法。 Java 8 + Maven 3.2.5
答案 0 :(得分:0)
默认情况下,jsonschema2pojo绑定到generate-sources
阶段。目前,当前模块的资源在classpath上不可用。
您应该将此插件的执行移至下一阶段。只要插件在compile
阶段之前执行,您的构建仍将正常运行。如果您将插件绑定到process-resources
,则当前模块的资源将在classpath上可用,以供jsonschema2pojo使用。
请参见http://maven.apache.org/guides/introduction/introduction-to-the-lifecycle.html