作为对第一个答案的回应,这是为 Maven 和 Eclipse 设置单独的输出文件夹的正当理由:
我正在尝试处理一个相当大的基于 Maven 的项目(200 多个子项目),涉及最新的 Scala(2.13),Eclipse 不支持该项目。Scala-IDE 在 2.12 时实际上已经死了。没有它,在 Eclipse 中进行干净的构建将删除 Maven 编译的 Scala 类并彻底破坏一切。我不确定是否需要提及 m2e 也无法使用。
所以这一切都以几行 perl 来修复我的工作区而告终。相信我,我已经尝试了很多其他方法。这个解决方案仍然需要我在另一个脚本步骤中将已编译的 Scala 类提供给 Eclipse,但这并不是真正的问题。
此解决方案不会更改 Maven 的,而是 Eclipse 的输出文件夹,方法是调整.classpath
由mvn eclipse:eclipse
. 将调用中的目标文件夹更改setAttribute(...)
为您喜欢的并在项目根目录中运行脚本。
#!/usr/bin/perl
use strict;
use XML::XPath;
my $files = [];
find_files( '.', '^\.classpath$', $files );
for my $file ( @$files ) {
my $xp = XML::XPath->new( filename => $file );
$xp->find( '/classpath/classpathentry[@kind="output"]' )
->[0]
->setAttribute( 'path', 'target-eclipse' );
open my $ofh, '>', $file or die 'Cannot open for writing: '.$file;
print $ofh $xp->getNodeAsXML;
close $ofh;
}
sub find_files {
my ( $path, $mask, $hits ) = @_;
opendir my $dh, $path or die 'Cannot open path: '.$path;
for my $entry ( grep { ! /^\.{1,2}$/ } readdir $dh ) {
my $fullpath = $path.'/'.$entry;
if ( -d $fullpath ) {
find_files( $fullpath, $mask, $hits );
} elsif ( $entry=~/$mask/ ) {
push @$hits, $fullpath;
}
}
closedir $dh;
}
更新:如果您不介意重新生成所有Eclipse 文件(这将擦除您可能拥有的任何其他自定义设置),您可以简单地执行以下操作:
mvn eclipse:eclipse -DoutputDirectory=target-eclipse