运行 Eclipse 项目使用另一个具有 Maven 依赖项的 Eclipse 项目
Running Eclipse project which uses another Eclipse Project that has a Maven dependency
我在 运行使用另一个具有 Maven 依赖项的 Eclipse 项目来创建 Eclipse 项目时遇到问题。
(我是 Maven 的新手,所以可能有一些重要的事情我做错了或忘了做)
问题环境
mapdat >普通Eclipse项目
config > Eclipse 项目有 1 个 Maven 依赖项(只有 1 个 class 有静态函数)
mapdat 已将 config 添加到其构建路径(项目 > 属性 > Java 构建路径 > 项目)。
config 项目创建为普通 Eclipse 项目。
现在我需要 JSON 库 org.json
inside config.
我想通过 Maven 依赖项提供此库,因此我执行了以下操作:
将 config 项目转换为 Maven 项目
配置 > Maven > 更新项目
config > 运行 As > Maven 安装
config > Maven > 添加依赖项 > org.json 20160212
with scope compile (也尝试使用 provided )
配置 > Maven > 更新项目
config > 运行 As > Maven 安装
pom.xml 的 config:
<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 依赖项的 config 项目(org.json),我收到以下错误:
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 项目添加特殊来源?
感谢您的帮助...
解决方案
我按照 O'Roan 在 中建议的那样将 mapdat 转换为 Maven 项目,并执行了描述的步骤(maven clean 和 maven install)。
解决方案的一个重要部分是在 Preferences > Java > Installed JREs (as default) 下添加 JDK 1.8 作为 "Installed JRE" 并检查 Execution Environments 设置 ( ... > 已安装的 JRE > 执行环境)。之后,我将首选项 > Java > 编译器 编译器合规级别 设置为 1.8。
然后我将 pom 中的源和目标配置也设置为 1.8。这有助于修复 运行ning Maven clean 和 Maven install 的问题。
完成 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>
地图数据
<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>
谢谢。
您可能希望将 mapdat 转换为 Maven 项目并将配置添加为 Maven 依赖项。然后在 mapdat 上 run > maven clean
和 run > maven install
。那应该处理所有的依赖关系和工作。
我在 运行使用另一个具有 Maven 依赖项的 Eclipse 项目来创建 Eclipse 项目时遇到问题。
(我是 Maven 的新手,所以可能有一些重要的事情我做错了或忘了做)
问题环境
mapdat >普通Eclipse项目
config > Eclipse 项目有 1 个 Maven 依赖项(只有 1 个 class 有静态函数)
mapdat 已将 config 添加到其构建路径(项目 > 属性 > Java 构建路径 > 项目)。
config 项目创建为普通 Eclipse 项目。
现在我需要 JSON 库 org.json
inside config.
我想通过 Maven 依赖项提供此库,因此我执行了以下操作:
org.json 20160212
with scope compile (也尝试使用 provided )pom.xml 的 config:
<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 依赖项的 config 项目(org.json),我收到以下错误:
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 项目添加特殊来源?
感谢您的帮助...
解决方案
我按照 O'Roan 在
解决方案的一个重要部分是在 Preferences > Java > Installed JREs (as default) 下添加 JDK 1.8 作为 "Installed JRE" 并检查 Execution Environments 设置 ( ... > 已安装的 JRE > 执行环境)。之后,我将首选项 > Java > 编译器 编译器合规级别 设置为 1.8。 然后我将 pom 中的源和目标配置也设置为 1.8。这有助于修复 运行ning Maven clean 和 Maven install 的问题。
完成 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>
地图数据
<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>
谢谢。
您可能希望将 mapdat 转换为 Maven 项目并将配置添加为 Maven 依赖项。然后在 mapdat 上 run > maven clean
和 run > maven install
。那应该处理所有的依赖关系和工作。