Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/maven/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java maven生成的jaxb类-ClassNotFoundException_Java_Maven_Jaxb - Fatal编程技术网

Java maven生成的jaxb类-ClassNotFoundException

Java maven生成的jaxb类-ClassNotFoundException,java,maven,jaxb,Java,Maven,Jaxb,我有一个maven模型项目,在这个项目中,我通过maven命令-clean-install生成jaxb类 jaxb类在目标文件夹下生成,jar文件在.m2 repository文件夹下生成 现在,在我的另一个项目中,添加这个jar作为具有适当组id和artifactId的依赖项 但我得到的是生成的jaxb类的ClassNotFoundException和编译错误 我正在更新我的问题以添加更多细节 模型项目的Pom文件 <build> <pluginManagem

我有一个maven模型项目,在这个项目中,我通过maven命令-clean-install生成jaxb类 jaxb类在目标文件夹下生成,jar文件在.m2 repository文件夹下生成

现在,在我的另一个项目中,添加这个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>

org.apache.maven.plugins
maven编译器插件
2.5.1
org.jvnet.jaxb2.maven2
maven-jaxb2-plugin
0.8.3
spf ssp生成
生成
${project.build.directory}/jaxbclasses/pqr/xyz
abc.vo.apply.v1
MyXSD.xsd
src/main/resources
真的
-XtoString
-Xequals
-XhashCode
org.jvnet.jaxb2_commons
jaxb2基础知识
0.6.4
clean install
上,它在下生成类文件。 目标 JAXB类 pqr xyz

使用包名-abc.vo.apply.v1

我还有另外两个Maven项目(jar),假设是A和B。 现在,我可以将jaxb模型项目用作maven依赖项,它可以很好地编译

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

这很可能是因为默认情况下,
目标
目录从未包含在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>

org.codehaus.mojo
构建助手maven插件
1.9.1
添加java源代码
添加源
${project.build.directory}/已生成

我添加了另一个答案,我认为这更准确

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

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

这意味着您也需要将这些文件放入Liferay安装的
lib
目录中。

请添加完整的堆栈跟踪?另外,您在
pom.xml
中为访问
jar
所做的更改会自动将“生成的”目录添加为源目录。我同意,这是默认设置。但是,除非OP发布执行或POM的输出,否则我们只能进行有条件的猜测。从逻辑上讲,如果插件确实生成了代码并自动将生成的目录添加为源文件夹,那么代码应该在jar中。此外,据我们所知,OP可以使用
org.codehaus.mojo:jaxb2-maven插件@马努:你能给这篇文章添加更多的信息吗?我们很想提供帮助,但我们需要更多的上下文。这就是为什么我将其作为您答案的注释(指向正确的方向)而不是作为单独的答案发布的原因。@Daniel,我已经更新了问题,以添加更多的细节。我试着使用了您的POM,果然,这些类被适当地包含在jar文件中。您是否正确地声明了依赖项?如何(通过反射或静态)访问生成的类?正如预期的那样,它们是在
abc.vo.apply.v1
包下生成的。当你说“手动将A、B和Jaxb模型项目复制到lib文件夹”时,你是指jar文件,对吗?太棒了,丹尼尔,你太棒了,在我的liferay项目中放了这些jar之后,它现在开始工作了。没问题,很高兴我能帮上忙。如果您对这个答案感到满意,请考虑将其标记为“正确”。嗨,丹尼尔,通过使用以下JAXB ARGS -XtoSouth-XQuALS,XHASHCODE类可以实现公共类SPFSSPVO实现等号、HashCode、ToStand,帮助我了解jaxb类如何实现可序列化接口。这实际上是一个单独的问题。基本上,您需要一个JAXB插件需要使用的称为“绑定文件”的东西。这篇文章描述了它是如何做到的。
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`