【发布时间】:2010-09-21 23:03:22
【问题描述】:
我在 Eclipse 3.3.2 中使用 maven 2.0.9。
我习惯于每天通过 mvn clean install 启动一次新版本。
然后,如果我刷新我的 Eclipse 项目,它将被 Maven 的 target 目录中的文件“污染”。
在执行搜索,通过“开放资源”获取资源等时非常烦人。
有没有办法避免 Eclipse 在这个文件夹中查找?
【问题讨论】:
我在 Eclipse 3.3.2 中使用 maven 2.0.9。
我习惯于每天通过 mvn clean install 启动一次新版本。
然后,如果我刷新我的 Eclipse 项目,它将被 Maven 的 target 目录中的文件“污染”。
在执行搜索,通过“开放资源”获取资源等时非常烦人。
有没有办法避免 Eclipse 在这个文件夹中查找?
【问题讨论】:
【讨论】:
maven 插件不会隐藏目标目录。但是,它确实使用 maven 目标文件夹来配置 eclipse。所以eclipse使用了target/classes和target/test-classes,eclipse过滤掉了这些文件夹。这是由“mvn eclipse:eclipse”以及 m2eclipse 插件完成的。剩下可见的是目标目录中除了这两个文件夹之外的所有内容(例如生成的jar文件)。
您可以为包资源管理器创建过滤器,但这不会影响“开放资源”。
【讨论】:
您是否尝试过配置“Java 元素过滤器”选项对话框(通过项目浏览器的右上角箭头)?
如果需要,您可以定义自己的ViewerFilter
【讨论】:
右键单击要忽略的文件夹,打开“属性”对话框,选择“资源”选项卡并选中“派生”框
【讨论】:
首选项 > 团队 > 忽略的资源
添加“目标”,然后重新启动 Eclipse。
【讨论】:
在 Maven 中重新配置“clean”不删除目标目录:
<plugin>
<artifactId>maven-clean-plugin</artifactId>
<configuration>
<excludeDefaultDirectories>true</excludeDefaultDirectories>
<filesets>
<!-- delete directories that will be generated when you
start the develpment server/client in eclipse
-->
<fileset>
<directory>target</directory>
<includes>
<include>**/*</include>
</includes>
</fileset>
</filesets>
</configuration>
</plugin>
(位于:http://maven.40175.n5.nabble.com/how-to-NOT-delete-target-dir-td3389739.html#a3413930)
【讨论】:
当 Eclipse 冻结时,查看进程活动,我可以看到它正在浏览我的所有目标、.hg 和 .git 目录。此外,这些目录也被复制到 Eclipse 的 bin 目录中。大量 CPU 和磁盘的使用无济于事。
不清理目标目录不是可接受的解决方案。
有一个使用 Monkey 脚本的解决方案 (http://maven.40175.n5.nabble.com/Eclipse-amp-target-directory-td72354.html),但该项目已关闭。
我仍在寻找一种解决方案来告诉 Eclipse 忽略 Maven 目标目录以及 .hg 和 .git 目录。
Eclipse 不断地看着那些是痛苦的。
我也使用 m2eclipse,但它不能解决这个问题。
【讨论】:
为了解决这个问题,这是我所做的:
-----------在此处剪切脚本-------------
/*
* Menu: Find System Prints > Beanshell
* Script-Path: /GroovyMonkeyScripts/monkey/UpdateMavenDerived_Beanshell.gm
* Kudos: Bjorn Freeman-Benson & Ward Cunningham & James E. Ervin
* License: EPL 1.0
* LANG: Beanshell
* DOM: http://groovy-monkey.sourceforge.net/update/plugins/net.sf.groovyMonkey.dom
*/
out.println("Setting target directories to derived status.");
var projects = workspace.getRoot().getProjects();
for ( var i = 0; i < projects.length; i++) {
var project = projects[i];
if (project.isOpen()) {
out.println("Project: " + project.getName());
var members = project.members();
for ( var j = 0; j < members.length; j++) {
if (members[j].getName().equals("target")) {
out.println("setting derived status on: "+ members[j].getFullPath());
members[j].setDerived(true);
}
}
}
}
【讨论】:
如果您经常使用“mvn clean install”,使用资源过滤器看起来可以解决问题。
基本上它会将“目标”添加到子文件夹以将文件夹直接排除到 .project 文件中。运行此脚本后,如果将项目导入 Eclipse,您可以看到设置“项目”->“属性”->“资源”->“资源过滤器”。在此之前,每当我运行 mvn clean install 时,eclipse 占用了我 50% 的 CPU,但现在它在构建项目时保持在 5% 以下。
function eclipse-setup() {
mvn eclipse:clean
mvn eclipse:eclipse
#maven target folders
find . -name .project -exec sed -i.MSORG 's/<\/projectDescription>/<filteredResources> <filter> <id>1314376338264<\/id> <name><\/name> <type>26
<\/type> <matcher> <id>org.eclipse.ui.ide.multiFilter<\/id> <arguments>1.0-name-matches-false-false-target<\/arguments> <\/matcher> <\/filter> <filt
er> <id>1314387234341<\/id> <name><\/name> <type>6<\/type> <matcher> <id>org.eclipse.ui.ide.multiFilter<\/id> <arguments>1.0-name-matches-false-fals
e-*.cache.html<\/arguments> <\/matcher> <\/filter> <\/filteredResources><\/projectDescription>/' {} \;
}
【讨论】:
我对这个问题非常生气,我写了一个插件来解决它。您可以从以下位置获取源代码和 jar:
【讨论】:
Indigo 解决方案 [SR2]
Project Explorer > Customize View > Filters > [*] Maven Build Folder
【讨论】:
我遇到了一些问题,因为这里的一些解决方案只适用于某些视图,所以我做了一个图文并茂的总结。
在 Eclipse 4.4 (Luna) 中测试,根据此处的其他答案,从 3.7 开始应该像这样工作。
Package Explorer View Menu → Filters... → 检查Name filter patterns 并输入target。
小心,这将隐藏所有名为 target 的文件夹和文件,而不仅仅是默认的 maven 构建目录! Project Explorer 视图有更好的选择,没有这个问题。
Project Explorer View Menu → Custom View... → 搜索“maven”并检查Maven build folder。
选中此选项将隐藏项目 pom.xml 配置中定义的构建目录。
【讨论】: