运行Eclipse项目,该项目使用另一个具有Maven依赖项的Eclipse Project

时间:2016-06-17 12:58:44

标签: java eclipse maven dependencies buildpath

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

问题环境

mapdat> 普通Eclipse项目
config> Eclipse项目有1个maven依赖项(只有1个带静态函数的类)

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

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

我希望通过Maven依赖提供此库,所以我做了以下操作:

  • config 项目转换为Maven项目
  • config > Maven>更新项目
  • config >运行方式> Maven安装
  • config > Maven>添加依赖关系> org.json 20160212范围编译(也尝试使用提供
  • config > Maven>更新项目
  • config >运行方式> 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库。

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

    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
    我是否必须在 mapdat 项目中添加特殊来源?

    感谢您的帮助...

    解决方案

    我将mapdat转换为Maven项目,就像O&#39; Roan在answer中建议并完成所描述的步骤(maven clean and maven install)。

    该解决方案的一个重要部分是添加JDK 1.8作为&#34;已安装的JRE&#34;在首选项&gt;下Java&gt;安装的JRE(默认)并检查执行环境设置(...&gt;已安装的JRE&gt;执行环境)。然后我设置了首选项&gt; Java&gt;编译器编译器合规性级别为1.8。 然后我将pom中的源和目标配置也设置为1.8。这有助于解决运行 Maven clean Maven安装的问题。

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

    当前工作的poms:

    配置

    <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>
    

    mapdat

    <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>
    

    感谢。

    1 个答案:

    答案 0 :(得分:0)

    您可能希望将mapdat转换为maven项目,并将config添加为maven依赖项。然后是mapdat上的run > maven cleanrun > maven install。这应该照顾所有的依赖和工作。