【问题标题】:How to add generated sources of dependent project to build path?如何将生成的依赖项目源添加到构建路径?
【发布时间】:2018-02-06 02:21:48
【问题描述】:

我正在使用 Intellij,而一位同事正在使用 Eclipse。有一个 datamodel 项目,大多数组件都依赖它,它包含所有 JPA 代码。

datamodel 依赖项之一是utils。在utils 中有生成的源。我在 Eclipse 中的同事将utils 的目标/生成源添加到构建路径中,一切都在 Eclipse 中构建并运行良好。

在 Intellij 中,当我转到 Project Structure 时,是否需要转到 utils 并将 utils 的 target/generated-sources 添加为 Source 文件夹以等效?

或者我需要将该模块添加为依赖项吗?

编辑: 在实用程序 pom 中:

         <plugin>
           <groupId>org.apache.maven.plugins</groupId>
           <artifactId>maven-antrun-plugin</artifactId>
           <executions>
             <execution>
               <id>generate-sources</id>
               <phase>generate-sources</phase>
               <configuration>
                 <tasks>
                   <mkdir dir="target/generated-sources" />
                   <exec executable="protoc">
                     <arg value="--java_out=target/generated-sources" />
                     <arg value="src/main/resources/utilities.proto" />
                   </exec>
                 </tasks>
                 <sourceRoot>target/generated-sources</sourceRoot>
               </configuration>
               <goals>
                 <goal>run</goal>
               </goals>
             </execution>
           </executions>
        </plugin>

【问题讨论】:

  • 如何管理这些依赖关系?例如,使用 maven 定义依赖项将自动包含 utils.jar,因此项目变得与 IDE 无关。如果项目是通过 IDE 手动管理以进行编译,那么如何准确部署项目及其所有依赖项?
  • utils 是 maven 中 datamodel 的依赖项。
  • 那么 datamodel.jar 应该是另一个项目中的依赖项。传递依赖也将包括 utils.jar(除非它被特别标记为排除或标记为提供)。
  • 使用build-helper-maven-plugin -> stackoverflow.com/a/5171035/685796

标签: java eclipse intellij-idea


【解决方案1】:

这取决于您在本地构建的项目是否真正生成了源代码。一个实例 Intellij 自动为我拾取生成的源。如果 Intellij 没有自动执行,那么您应该手动将其作为源文件夹。

如果您的项目没有生成源代码,那么您应该将它们添加为依赖项。

因此,在您的情况下,已经在 utils 依赖项/项目中做出了决定。 utils 依赖项/项目是生成源代码还是包含源代码?

【讨论】:

  • utils 项目生成源代码。
  • 然后你应该将项目添加为maven中的依赖项。依赖的创建者已经决定了如何打包依赖。通常在 Maven 环境中,您公司的软件包已经安装在您的工件存储库中。您唯一需要做的就是在您自己的 pom 中定义依赖项以将其包含在您的项目中。如果依赖项不在公司存储库中,则需要项目的源代码并使用 maven 生成和编译源代码。这通常由命令完成:maven clean install
  • 如果其他项目也需要它,请考虑将其安装在您的公司存储库中。这通常由命令完成:maven clean deploy
  • 我想说的是,您可能不需要生成的源,但您可以使用工件来代替
【解决方案2】:

您可以使用由您的同事构建的utils 作为依赖项。 但是,如果您想更改 utils 的来源,则应通过添加以下内容来修复其 pom.xml:

<plugin>
    <groupId>org.codehaus.mojo</groupId>
    <artifactId>build-helper-maven-plugin</artifactId>
    <version>1.4</version>
    <executions>
        <execution>
            <id>test</id>
            <phase>generate-sources</phase>
            <goals>
                <goal>add-source</goal>
            </goals>
            <configuration>
                <sources>
                    <source>${basedir}/target/generated-sources</source>
                </sources>
            </configuration>
        </execution>
    </executions>
</plugin>

IntelliJ 支持该插件,点击Reimportgenerated-sources 文件夹将被标记为Source 文件夹。

【讨论】:

    猜你喜欢
    • 2012-01-21
    • 2016-04-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-01-09
    • 2014-10-18
    • 1970-01-01
    • 2016-01-14
    相关资源
    最近更新 更多