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

Maven:从编译中排除目标/生成的源

钱繁
2023-03-14

这个问题,只是为了确保我的解释是正确的:

我正在使用Mojohaus jaxb2 maven插件从中生成java类。xsd文件,默认情况下,它会将它们放在目标/生成的源中

现在,我想在源代码管理中跟踪这些类(当然不包括target),有一天我可能会用注释或一行代码稍微定制一个类,甚至可能会更改我的类生成插件,所以我要做的是在src/main/java中复制这些类和包

当我尝试编译时,这让Maven感到不安,因为他认为“目标/生成源”是一个源目录,并且他两次找到所有类。据我所知,我可以排除源目录中的类,但我不能从Maven构建中删除源目录,对吗?

所以唯一的解决方案是配置我的jaxb2插件以在其他地方生成类,对吗?

更新:

好吧,这并不像我想的那样有效,如果我更改我的jaxb插件的outputDirectory,它仍然被Maven作为源目录包含,我不知道为什么。

    <configuration>      
                <outputDirectory>${project.build.directory}/tatata/jaxb</outputDirectory>
    </configuration>

更新2:解释是插件在构建的generate sources阶段将outputDirectory添加为maven源目录,它不是可选的或可定制的。

共有3个答案

冀啸
2023-03-14

您可以随时在pom配置文件中指定目标目录(GenerateDirectory),如下所示。希望有帮助

`

<plugin>
        <groupId>org.jvnet.jaxb2.maven2</groupId>
        <artifactId>maven-jaxb2-plugin</artifactId>
        <version>0.12.3</version>
        <executions>
                            <execution>
                                <goals>
                                    <goal>generate</goal>
                                </goals>
                            </execution>
                        </executions>
                        <configuration>
                            <schemaLanguage>WSDL</schemaLanguage>
                            <generateDirectory>${basedir}/src/main/java</generateDirectory>
                            <generatePackage>com.myproj.proxy</generatePackage>
                            <schemas>
                                <schema>
                                    <!-- <url>${project.basedir}/src/main/resources/wsdl/test.wsdl</url> -->
                                    <fileset>
                                        <!-- Defaults to schemaDirectory. -->
                                        <directory>${basedir}/src/main/resources/wsdl</directory>
                                        <!-- Defaults to schemaIncludes. -->
                                        <includes>
                                            <include>*.wsdl</include>
                                        </includes>
                                    </fileset>
                                </schema>
                            </schemas>
                        </configuration>
                    </plugin>

`

谭建章
2023-03-14

Laccore的答案是一个有趣的线索,但我的问题是关于我目前使用的插件,而不是如何使用其他插件。

所以这是Mojohaus插件的解决方法:您可以默认跳过生成源(当您的模型每周更改一次,然后每年更改一次时,无需在每次构建时执行此任务),并且仅在需要时使用专用的maven配置文件触发它:如何在Maven中跳过生成源

尚河
2023-03-14

首先,不要在源代码管理中添加生成代码。不要手动修改它。你会有麻烦的。相信我,我已经看过太多次了。一个新版本的模式,你就迷路了。

好的,现在回答你的问题。

使用maven-jaxb2-plugin可以关闭将生成目录添加为编译源根目录的功能,方法是:

<configuration>
    <addCompileSourceRoot>false</addCompileSourceRoot>
</configuration>

免责声明:我是maven-jaxb2-plugin的作者。

 类似资料:
  • 试图从我的构建中提取文件夹,但以下操作不起作用: 有什么想法吗?

  • 我们试图从Jenkins构建一个maven工件并将其部署到我们的Nexus存储库管理器中,但是我们在构建过程中遇到了编译错误。这就是我们得到的错误! 错误]无法执行目标org.apache.maven.plugins:maven-compiler-plugin:3.5.1:在项目上编译(default-compile)studentapp:编译失败错误]此环境中没有提供编译器。您可能是在JRE上运

  • 我已经搜索了所有关于为什么我们应该有不同于目标的来源,但不一致的答案: 如果JDK向下兼容,为什么在1.7上编译时需要将目标设置为1.8? 将源设置为高于目标将不起作用,例如错误: 源版本8需要目标版本1.8 同样来自Maven: 仅仅设置target选项并不能保证代码在具有指定版本的JRE上实际运行。陷阱在于无意中使用了只存在于后来的JRE中的API,这会导致代码在运行时出现链接错误 有人能举个

  • 我有一个maven项目,它是从git回购复制到我的eclipse上的。它是基于Java8构建的。我要做的第一件事就是做一个 但我收到以下失败信息: 以及汇编设置: 无论我构建项目多少次,我都会得到相同的错误。即使在清理项目并从eclipse中刷新它之后也没有帮助。请导游。 更新: 在添加属性以设置maven编译器插件之后 , 我得到以下错误: 下面是给出MainUITabbed类编译错误的代码片段

  • 所以,我已经找了好几个小时了,我完全陷入了困境。 我的问题很简单:我有一个(相当大的)项目,我想用Maven来构建(所以我可以稍微自动化一下)。到目前为止,除了一个主要问题外,一切正常。 我有一个称为“java插件”的依赖项——我不知道它的确切来源或作者,但它在我的依赖项的依赖项中——我将它添加到我们自己的Nexus第三方存储库中,并使用原始jar的名称。 这个插件是从我的Nexus添加的,没有任

  • 我希望能够自动设置我们的eclipse项目来忽略使用m2e的可选编译问题,但是我似乎遇到了m2e和maven的冲突。 如果我使用build helper maven插件添加源目录,那就太好了——我不必自动将