0

我有一个 Maven 项目,其中一些 json 模式被组织到这样的文件夹中:

src/main/resources/schema/json/modules/moduleA/typesA.json src/main/resources/schema/json/modules/moduleA/typeA.json

所以两个模式都位于同一个文件夹中。

typesA 模式链接到 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:无法从类路径中读取内容,找不到文件:org.jsonschema2pojo.ContentResolver.resolveFromClasspath(ContentResolver.java:94) 处的资源:/schema/json/modules/moduleA/typeA.json ) 在 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) at org.jsonschema2pojo.rules.SchemaRule.apply(SchemaRule.java:30) at org.jsonschema2pojo.rules.ArrayRule.apply(ArrayRule.java:81) at org. org.jsonschema2pojo.rules.TypeRule.apply(TypeRule.java:113) 上的 jsonschema2pojo.rules.ArrayRule.apply(ArrayRule.java:37) 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。应用(架构规则。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.jsonschema2 .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.jsonjsonschema2pojo#ref应该是可能的。当我尝试通过运行 mvnDebug 来调试插件执行时,它有时可以工作,有时不能。那么这是一个已知问题吗?仅使用

"$ref": "typeA.json"

它总是有效的。但这对我来说只是一个临时的解决方法。Java 8 + 行家 3.2.5

4

1 回答 1

0

默认情况下 jsonschema2pojo 绑定到generate-sources阶段。当前模块的资源此时在类路径上不可用。

您应该将此插件的执行移至稍后阶段。只要插件在compile阶段之前执行,那么您的构建仍然可以正常工作。如果您将插件绑定到,process-resources则当前模块的资源将在类路径上可供 jsonschema2pojo 使用。

请参阅http://maven.apache.org/guides/introduction/introduction-to-the-lifecycle.html

于 2018-08-15T19:22:19.853 回答