14

我使用 Apache Maven 来管理我的 Java 库(jar)和一些使用这些库的项目。为方便起见,我使用mvn eclipse:eclipse生成的Eclipse 项目文件可以导入到 Eclipse 工作区进行编辑。

当我在同一个 Eclipse 工作区中编辑主项目和 Java lib 项目时会出现问题。也就是说,在文件中mvn eclipse:eclipse包含src 路径依赖项,而不是预期的依赖项。.classpathjar

假设我有一个名为mylib. 相应的 jar 文件mylib.jar已部署到我维护的私有 Maven 存储库中。为了在主项目中使用 mylib.jar,在pom.xml.

<!-- pom.xml for the main project -->
<dependency>
  <groupId>namespace.my</groupId>
  <artifactId>mylib</artifactId>
  <version>[1.0, )</version>
</dependency>

mvn compile并且mvn test工作完美,其中mylib.jar自动从我的仓库下载。但是,在尝试时mvn eclipse:eclipse,我发现生成的.classpath文件没有mylib.jar按预期包含依赖项。相反,它包含 mylib 的源文件目录,如下所示。

<!-- .classpath file generated by mvn eclipse:eclipse -->
<classpathentry kind="src" path="/mylib"/>

看来 Maven 读取了 Eclipse 的元数据,发现 mylib 和主项目在同一个工作区中共存。因此,maven 包含了对我有益的来源。该死。如何告诉 maven 忽略本地项目源并只包含 jar 文件?

4

6 回答 6

12

我相信这实际上是因为它们是 Eclipse 中的相关项目。因此,如果您右键单击您的主项目并转到Project References您的 lib 项目,则应该勾选。

如果您运行mvn eclipse:eclipse它,它将自动为任何子项目(模块)添加项目引用。您可以使用Maven Eclipse 插件的useProjectReferences属性来更改它。

它默认为true, 但是

设置为 false 时,插件不会创建子项目,而是使用本地存储库中安装的包引用这些子项目

要使用该属性,请在您的 pom.xml 中设置该属性

<build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-eclipse-plugin</artifactId>
            <version>2.9</version>
            <configuration>
                <useProjectReferences>false</useProjectReferences>
            </configuration>
        </plugin>
    <plugins>
<build>

或者作为命令行上的属性:

mvn eclipse:eclipse -Declipse.useProjectReferences=false
于 2012-09-25T06:30:40.670 回答
11

我需要避免将依赖项作为引用项目包含在内,而是作为 jar 包含。使用 Eclipse 4.6 Neon 以前的解决方案都不起作用。

我已禁用该Workspace Resolution功能

click on the project -> Maven -> Disable Workspace Resolution
于 2015-12-29T15:48:57.593 回答
0

感谢猎犬的提示。是的,useProjectReferences控制 Maven 如何处理子项目——包括源目录或包括 jar 文件。

我还没有安装 Eclipse 的 maven 插件,所以在pom.xml. 它告诉 Maven 在本地 maven 存储库中包含 jar 依赖项,而不是源目录。如果本地 repo 中不存在所需的 jar 文件,它将自动即时下载。

  <!-- pom.xml for the main project: include jar, not src path -->
  <plugin>
  <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-eclipse-plugin</artifactId>
    <version>2.9</version>
    <configuration>
            <useProjectReferences>false</useProjectReferences>
    </configuration>
  </plugin>

现在mvn eclipse:eclipse按预期工作。

于 2012-09-25T08:07:23.780 回答
0

只需尝试在依赖标记中使用 type 元素并在 pom.xml 中提及 source/jar 作为类型

<!-- pom.xml for the main project --> 
<dependency>
   <groupId>namespace.my</groupId>
   <artifactId>mylib</artifactId>
   <version>[1.0, )</version>
   <type>jar<type> <!-- source/jar -->
 </dependency> 
于 2012-09-25T13:38:17.377 回答
0

我最近经历过这种行为是由 pom.xml 文件中所述的版本触发的。如果您的主要项目所依赖的 lib 版本可用于工作区中的 eclipse(例如,与 lib 匹配的 pom.xml [group,artifact,version] 的项目),这将被用作项目参考被从 M2REPO 位置拉出。

我的解决方案是将工作区中的库 pom.xml 的版本更改为另一个版本,以便我改进库,而主要项目仍然从 M2REPO 中提取旧的库。

通过对齐版本号来使用它,您可以轻松地执行并发的工件改进/更改。

我还没有测试你是否需要在mvn eclipse:eclipse每次更改 lib pom.xml 文件和主要 pom.xml 依赖项时运行,但我希望它是这样。

于 2015-06-28T21:55:56.227 回答
0

我尝试在 eclipse 中关闭项目,并且工作区刚刚自己构建,这次从存储库中获取 jar 而不是链接项目

于 2016-05-18T10:25:09.847 回答