maven2 eclipse buildpath resources 问题

本文解释了为什么在Eclipse中配置Java项目时,资源文件会被设置为排除所有内容(excluded=**)。这是为了确保这些资源由Maven Builder进行处理,包括过滤和其他插件的处理。手动移除排除设置会导致JDT复制资源并覆盖由Maven插件生成的已过滤资源。

https://docs.sonatype.org/display/M2ECLIPSE/Project+FAQ#ProjectFAQ-WhyresourcefoldersinJavaprojecthaveexcluded%3D%22%22

 

Why resource folders in Java project have excluded="**"

Many users are confused that when Java project is configured in Eclipse, resource folders gets excluded="**". This is done intentionally, because those resources are processed by the "Maven Builder" registered to the project. This builder provides special resource handling, that includes filtering, as well as execution of other Maven plugins for processing resources. See Maven build lifecycle for more details.

If you manually remove resource exclusion, JDT will copy resources and overwrite filtered resources generated by Maven plugins.

Actually project resource folder doesn't really need to be added to the buildpath (Maven Builder is going to work without it), but it been considered convenient and look better in the Package Explorer and other Eclipse views.

Also note, that classpath used for JUnit and Java Application launch configurations for projects that have Maven support enabled is also calculated in a special way and excluded resources does not affect it either.

<think>我们正在解决Eclipse中Java Build Path的Library没有Classpath问题。根据引用[1],我们知道类加载器(如AppClassLoader)在程序运行前已经确定,所以修改类路径可能不会生效。引用[2]和[3]则解释了Build Path的作用:它告诉Eclipse在哪里查找类库,而类加载器会根据这些设置加载类。引用[4]提到添加Maven依赖失败的问题,但我们的问题是没有Classpath。 根据引用[2]和[3],Java Build Path中的Libraries用于指定项目依赖的库(JAR文件、类文件夹等)。通常,我们会在Libraries下看到“Classpath”条目,它实际上是一个容器,包含了所有通过Add JARs、Add External JARs、Add Library等方式添加的库。 如果Library中没有Classpath,可能是以下原因: 1. 项目本身没有添加任何库,所以没有显示Classpath条目。 2. Eclipse的视图设置问题,导致Classpath没有显示。 3. 项目配置错误,如.classpath文件被错误修改。 解决方案: 1. 检查项目是否确实需要添加库。如果需要,手动添加: - 右键项目 -> Build Path -> Configure Build Path - 在Libraries选项卡中,点击“Add Library”或“Add JARs”来添加必要的库。 - 添加后,Classpath容器会自动出现(通常称为“Referenced Libraries”或类似名称)。 2. 如果已经添加了库但仍然不显示,尝试刷新项目: - 右键项目 -> Refresh - 或者清理并重新构建项目:Project -> Clean 3. 检查项目的.classpath文件(在项目根目录,可能是隐藏文件): - 确保其中包含类似以下内容: <classpath> <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/> <classpathentry kind="src" path="src"/> <classpathentry kind="lib" path="lib/yourjar.jar"/> <!-- 如果有添加的库 --> <classpathentry kind="output" path="bin"/> </classpath> - 如果缺少库的条目,可以手动添加(但通常建议通过Eclipse界面操作)。 4. 如果上述方法无效,可以尝试重置.classpath文件: - 备份当前.classpath文件,然后删除它(或重命名)。 - 在Eclipse中右键项目 -> Build Path -> Configure Build Path -> 切到Libraries选项卡,确保所有库都正确(如果缺少,重新添加)。 - 然后点击OK,Eclipse会重新生成.classpath文件。 5. 如果问题仍然存在,可能是Eclipse本身的问题,尝试重启Eclipse或检查Eclipse的更新。 注意:根据引用[1],修改类加载路径(如使用System.setProperty)在程序运行后可能无效,因此我们应通过Build Path正确配置。 如果用户遇到的是添加了库但没有在Classpath下显示,那么可能是Eclipse的显示问题,可以尝试切换视图(比如从Package Explorer切换到Project Explorer)或者重启Eclipse。 根据引用[4]中提到的添加Maven依赖失败的问题,虽然与当前问题不直接相关,但如果是Maven项目,可能需要检查Maven依赖是否被正确导入。如果是Maven项目,应该使用Maven管理依赖,然后在Build Path中会有一个Maven Dependencies库。 因此,如果用户的项目是Maven项目,并且没有看到Maven Dependencies库,那么需要: - 右键项目 -> Maven -> Update Project - 确保项目已正确转换为Maven项目(有pom.xml且项目图标上有M字样) 但用户的问题是关于Classpath的,所以这里我们主要关注非Maven项目的情况。 总结步骤: 1. 确认项目需要哪些库,并在Build Path中添加。 2. 刷新项目,清理构建。 3. 检查.classpath文件。 4. 重置.classpath文件(谨慎操作)。 5. 重启Eclipse。 如果用户的问题是在Library中没有看到Classpath节点,那么请注意:在Build Path配置界面的Libraries选项卡中,添加的库会直接列在下面,而不会有一个名为“Classpath”的容器。通常,我们所说的Classpath是指整个构建路径的集合。在.classpath文件中,所有的条目都是classpath的一部分。在Eclipse的界面中,这些库会以平铺的方式显示在Libraries选项卡中,而不是放在一个名为“Classpath”的文件夹下。所以,用户可能误解了显示方式。 因此,请用户确认: - 在Build Path的Libraries选项卡中,是否已经添加了所需的JAR包或类文件夹? - 如果没有添加,请添加;如果已经添加,那么这些库就已经在项目的构建路径中了,即使没有显示“Classpath”节点。 所以,问题的核心可能是:用户误以为应该有一个名为“Classpath”的库容器,但实际上,添加的库会直接显示在Libraries列表中,每个库单独一行。 如果用户的意思是“添加的库没有生效,即程序运行时找不到类”,那么我们需要检查类加载机制(如引用[1]所述)和构建路径是否正确。 因此,请根据具体情况选择解决方案。 </think>### Eclipse中Java Build Path的Library缺少Classpath的解决方案 在Eclipse中,当Java Build Path的Library部分缺失Classpath条目时,这通常与类加载器机制或项目配置有关。以下是系统化的解决方案: #### 1. **手动添加Classpath变量** - 右键项目 → `Build Path` → `Configure Build Path` - 在`Libraries`选项卡 → 点击 `Add Class Folder...` - 选择项目中的资源文件夹(如 `src/main/resources`) - **原理**:直接指定类文件夹路径,绕过类加载器初始化限制[^1][^3] #### 2. **修复.classpath文件** - 在项目根目录找到隐藏文件 `.classpath` - 检查是否包含以下关键条目: ```xml <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/> <classpathentry kind="output" path="bin"/> ``` - 手动添加缺失的Classpath条目: ```xml <classpathentry kind="lib" path="your/jar/path.jar"/> ``` - 保存后右键项目 → `Refresh` #### 3. **重建类加载器配置** ```java // 在程序入口动态重置类加载路径 public static void main(String[] args) { System.setProperty("java.class.path", "/your/custom/classpath"); URLClassLoader newLoader = new URLClassLoader(new URL[]{...}); Thread.currentThread().setContextClassLoader(newLoader); } ``` **注意**:需重启Eclipse生效,避免类加载器缓存问题[^1][^2] #### 4. **检查Build Path顺序** - 在`Order and Export`选项卡中: 1. 将`JRE System Library`移至顶部 2. 确保自定义库勾选了`Export`选项 3. `Maven Dependencies`需置于用户库之前[^2][^4] #### 5. **重置Eclipse配置** - 关闭Eclipse - 删除工作区目录中的 `.metadata/.plugins/org.eclipse.core.resources` 文件夹 - 重启Eclipse → `File` → `Import` → 重新导入项目 > **根本原因**Eclipse的类加载器在启动时固化classpath[^1],且Web容器(如Tomcat)有独立的类加载机制[^2],直接修改运行时路径通常无效。推荐优先使用 `.classpath` 文件或IDE配置界面操作。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值