当前位置: 首页 > 知识库问答 >
问题:

maven生成的jaxb类-ClassNotFoundException

张嘉熙
2023-03-14

我有一个maven模型项目,我通过maven命令-clean install生成jaxb类,jaxb类在目标文件夹下生成,jar文件在目标文件夹下生成。m2存储库文件夹。

现在在我的另一个项目中,将这个jar添加为具有适当组id和artifactId的依赖项。

但我得到的是生成的jaxb类的ClassNotFoundException和编译错误。

我正在更新我的问题以添加更多细节。

模型项目的Pom文件。

<build>
        <pluginManagement>
            <plugins>
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-compiler-plugin</artifactId>
                    <version>2.5.1</version>
                </plugin>
            </plugins>
        </pluginManagement>
        <plugins>
            <plugin>
                <groupId>org.jvnet.jaxb2.maven2</groupId>
                <artifactId>maven-jaxb2-plugin</artifactId>
                <version>0.8.3</version>
                <executions>
                    <execution>
                        <id>spf-ssp-generate</id>
                        <goals>
                            <goal>generate</goal>
                        </goals>
                        <configuration>
                            <generateDirectory>${project.build.directory}/jaxbclasses/pqr/xyz</generateDirectory>
                            <generatePackage>abc.vo.apply.v1</generatePackage>
                            <schemaIncludes>
                                <include>MyXSD.xsd</include>
                            </schemaIncludes>
                        </configuration>
                    </execution>
                </executions>
                <configuration>
                    <schemaDirectory>src/main/resources</schemaDirectory>
                    <extension>true</extension>
                    <args>
                        <arg>-XtoString</arg>
                        <arg>-Xequals</arg>
                        <arg>-XhashCode</arg>
                    </args>
                    <plugins>
                        <plugin>
                            <groupId>org.jvnet.jaxb2_commons</groupId>
                            <artifactId>jaxb2-basics</artifactId>
                            <version>0.6.4</version>
                        </plugin>
                    </plugins>
                </configuration>
            </plugin>
        </plugins>
    </build>

clean install上,它生成下面的类文件。目标jaxbclasses pqr xyz

包装名称为abc。哇。申请v1

我有另一个两个Maven项目(jar),假设为,A

现在,我的Web项目不是Maven项目,而是基于Ant的Liferay。我手动将A、B和Jaxb模型项目复制到lib文件夹中。这是罚款。但我发现了一个例外。

共有2个答案

龙才俊
2023-03-14

这很可能是因为默认情况下,target目录从未包含在jar文件中。尝试在(比如)target/generated下配置要生成的JAXB类。然后,将其添加到POM的构建插件部分:

  <plugin>
     <groupId>org.codehaus.mojo</groupId>
     <artifactId>build-helper-maven-plugin</artifactId>
     <version>1.9.1</version>
     <executions>
        <execution>
          <id>add-java-sources</id>
          <goals>
            <goal>add-source</goal>
          </goals>
          <configuration>
            <sources>
              <source>${project.build.directory}/generated</source>
            </sources>
          </configuration>
       </execution>
    </executions>
  </plugin>
公羊安怡
2023-03-14

我补充了另一个答案,我认为更准确。

为了编译您的JAXB项目,我必须添加以下依赖项:

<dependency>
  <groupId>org.jvnet.jaxb2_commons</groupId>
  <artifactId>jaxb2-basics</artifactId>
  <version>0.6.5</version>
</dependency>

这显然不会自动成为Liferay类路径的一部分。

当我运行mvn dependency:list时,我得到了以下信息:

org.jvnet.jaxb2_commons:jaxb2-basics-tools:jar:0.6.4:compile
org.jvnet.jaxb2_commons:jaxb2-basics:jar:0.6.4:compile
commons-lang:commons-lang:jar:2.2:compile
commons-logging:commons-logging:jar:1.1.1:compile
com.google.code.javaparser:javaparser:jar:1.0.8:compile
org.jvnet.jaxb2_commons:jaxb2-basics-runtime:jar:0.6.4:compile
commons-beanutils:commons-beanutils:jar:1.7.0:compile`

这意味着您也需要将它们放在Liferay安装的lib目录中。

 类似资料:
  • 使用这个maven插件,我能够生成我的类,并在另一个模式中重用它们;这真是太棒了! 现在我发现自己的模式需要两个插曲(从模式生成的两个不同的包)。我只是简单地尝试在XJC中添加另一个arg,但没有起作用。 然后我更改了两个参数的顺序,错误的目标是另一个模式。然后我明白了,这两集都可以,但这可能不是做事的方式。 以下是我的一些POM: 我得到的是: 新手在这里,任何帮助非常感谢:)。

  • 我试图让Maven使用嵌套的xml模式生成JAXB绑定:模式a导入模式B。模式B导入模式C。 如果模式A中的对象引用了模式B中不依赖于模式C对象的对象,那么一切都构建得很好。如果模式B中的对象引用了模式C中的对象,它就会中断。也就是说,深入一层是可行的。去两个深度没有。 只要我在模式A中添加一个引用模式B中对象的对象,而模式B又引用了模式C中的对象,我就会得到一个组织。xml。萨克斯。SAXPar

  • 问题内容: 我正在使用Java 6,JaxB 2和SpringSource Tool Suite(与Eclipse相同)。我编写了一些Java类,使用JaxB从中生成XML模式。但是,我注意到为了使用JaxB从Java对象生成XML文档的功能,我需要一个ObjectFactory。 如何生成ObjectFactory而不会浪费我现在已有的类? 问题答案: 更新 这个问题可能指的是创建一个角色的作用

  • 我有两个XSD,其中一个包含另一个,让我们称它们为A和B。 B有很多xs:complexType定义,并且包含在a中,但是a只对其中的一些定义感兴趣。 现在发生的事情是为B中定义的所有类型生成类。我想要实现的是只为A直接引用的类型生成类。 我曾尝试修改XSD A以导入B,而不是包含,但对于maven jaxb插件来说,效果并不理想。 XSD A导入B: 生成源的插件设置: 我知道有一种方法可以从命

  • 我使用JAXBXJC工具从多个XML文件生成了多个类。 这些XML文件有共同的标记名,这涉及到,当我生成java类时,我有多个同名的类。我将它们放入不同的包中,并因此重命名了它们。 但我仍然有一个错误: 元素名{}文档有多个映射。这个问题与以下位置有关:在公共javax.xml.bind.JAXBElementcom.xxx.generatedByJaxb.bal.ObjectFactory.cr