【问题标题】:Running Eclipse project which uses another Eclipse Project that has a Maven dependency运行使用另一个具有 Maven 依赖项的 Eclipse 项目的 Eclipse 项目
【发布时间】:2016-10-19 07:52:47
【问题描述】:

我在使用另一个具有 Maven 依赖项的 Eclipse 项目运行 Eclipse 项目时遇到问题。
(我是 Maven 新手,所以我可能会做错或忘记做一些重要的事情)

问题环境

ma​​pdat > 普通 Eclipse 项目
config > 具有 1 个 maven 依赖项的 Eclipse 项目(只有 1 个具有静态函数的类)

ma​​pdat 已将 config 添加到其构建路径(项目 > 属性 > Java 构建路径 > 项目)。

config 项目是作为普通 Eclipse 项目创建的。
现在我需要 config 中的 JSON 库 org.json

我想通过 Maven 依赖项提供这个库,所以我做了以下操作:

  • config 项目转换为 Maven 项目
  • 配置 > Maven > 更新项目
  • 配置 > 运行方式 > Maven 安装
  • config > Maven > Add Dependency > org.json 20160212 with scope compile(也尝试了 provided
  • 配置 > Maven > 更新项目
  • 配置 > 运行方式 > Maven 安装
  • 配置

    pom.xml

    <project>
    ...
        <modelVersion>4.0.0</modelVersion>
        <groupId>ch.audacus.config</groupId>
        <artifactId>config</artifactId>
        <version>0.0.1-SNAPSHOT</version>
        <build>
            <sourceDirectory>src</sourceDirectory>
            <plugins>
                <plugin>
                    <artifactId>maven-compiler-plugin</artifactId>
                    <version>3.3</version>
                    <configuration>
                        <source/>
                        <target/>
                    </configuration>
                </plugin>
            </plugins>
        </build>
        <dependencies>
            <dependency>
                <groupId>org.json</groupId>
                <artifactId>json</artifactId>
                <version>20160212</version>
            </dependency>
        </dependencies>
    </project>
    

    一切似乎都很好;没有错误也没有警告。

    问题

    当我直接运行 config 时没有错误,我可以使用 org.json 库。

    如果我尝试运行使用具有 Maven 依赖项 (org.json) 的 config 项目的 ma​​pdat 项目,我会收到以下错误:

    Exception in thread "main" java.lang.NoClassDefFoundError: org/json/JSONObject
        at ch.audacus.config.Config.readConfig(Config.java:45)
        at ch.audacus.mapdat.Editor.initEditor(Editor.java:35)
        at ch.audacus.mapdat.Editor.<init>(Editor.java:28)
        at ch.audacus.mapdat.Editor.main(Editor.java:73)
    Caused by: java.lang.ClassNotFoundException: org.json.JSONObject
        at java.net.URLClassLoader.findClass(Unknown Source)
        at java.lang.ClassLoader.loadClass(Unknown Source)
        at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
        at java.lang.ClassLoader.loadClass(Unknown Source)
        ... 4 more
    

    我是否正确设置了 Maven 依赖项?
    是否需要特殊的运行配置?
    我必须在 Maven 项目 config 中指定目标吗?
    我是否必须向 ma​​pdat 项目添加特殊来源?

    感谢您的帮助...


    解决方案

    正如 O'Roan 在 answer 中建议的那样,我将 mapdat 转换为 Maven 项目,并执行了描述的步骤(maven clean 和 maven install)。

    解决方案的一个重要部分是在 Preferences > Java > Installed JREs(默认)下添加 JDK 1.8 作为“Installed JRE”并检查执行环境设置(...> Installed JREs > Execution Environments)。之后我将 Preferences > Java > Compiler Compiler compliance level 设置为 1.8。 然后我将 pom 中的源和目标配置也设置为 1.8。这有助于解决运行 Maven cleanMaven install 的问题。

    在完成 Maven 项目更新时,在项目上设置的 JRE 系统库也存在问题:
    在 Maven 项目更新后,它会自动将 J2SE-1.5 设置为 JRE 系统库,这对于使用 Java 8 的项目不起作用。这个问题是由于 pom 中缺少源和目标配置造成的。

    当前工作的 pom:

    配置

    <project>
    ...
        <modelVersion>4.0.0</modelVersion>
        <groupId>ch.audacus.config</groupId>
        <artifactId>config</artifactId>
        <version>0.0.1-SNAPSHOT</version>
        <build>
            <sourceDirectory>src</sourceDirectory>
            <plugins>
                <plugin>
                    <artifactId>maven-compiler-plugin</artifactId>
                    <version>3.3</version>
                    <configuration>
                        <source>1.8</source>
                        <target>1.8</target>
                    </configuration>
                </plugin>
            </plugins>
        </build>
        <dependencies>
            <dependency>
                <groupId>org.json</groupId>
                <artifactId>json</artifactId>
                <version>20160212</version>
            </dependency>
        </dependencies>
    </project>
    

    地图数据

    <project>
    ...
        <modelVersion>4.0.0</modelVersion>
        <groupId>ch.audacus.mapdat</groupId>
        <artifactId>mapdat</artifactId>
        <version>0.0.1-SNAPSHOT</version>
        <build>
            <sourceDirectory>src</sourceDirectory>
            <plugins>
                <plugin>
                    <artifactId>maven-compiler-plugin</artifactId>
                    <version>3.3</version>
                    <configuration>
                        <source>1.8</source>
                        <target>1.8</target>
                    </configuration>
                </plugin>
            </plugins>
        </build>
        <dependencies>
            <dependency>
                <groupId>ch.audacus.config</groupId>
                <artifactId>config</artifactId>
                <version>0.0.1-SNAPSHOT</version>
            </dependency>
        </dependencies>
    </project>
    

    谢谢。

    【问题讨论】:

      标签: java eclipse maven dependencies buildpath


      【解决方案1】:

      您可能希望将 mapdat 转换为 maven 项目并将配置添加为 maven 依赖项。然后 run &gt; maven cleanrun &gt; maven install 在 mapdat 上。这应该照顾所有的依赖和工作。

      【讨论】:

      • 我将 mapdat 转换为 maven 项目,并将 config 项目添加为 maven 依赖项。这似乎工作正常(配置项目没有发生错误)。但是,如果我在两个项目上更新、清理、安装并尝试运行它,则会出现相同的错误:java.lang.NoClassDefFoundError: org/json/JSONObject
      • 我设法让它与您建议的解决方案一起使用。我用对我有用的解决方案更新了问题。
      猜你喜欢
      • 2011-04-15
      • 2016-03-08
      • 1970-01-01
      • 2018-10-28
      • 2011-05-14
      • 1970-01-01
      • 2011-02-21
      • 2020-09-14
      相关资源
      最近更新 更多