1

我正在使用 eclipse juno & maven 2.2.1。

有没有一种简单的方法可以将 eclipse 输出文件夹与 maven 分开?所以我想在目标目录中构建eclipse,在target-maven目录中构建maven。

我尝试使用

 <directory>target-maven</directory>

在 pom.xml 中。

如果我在创建项目后这样做,它工作正常。
但是当从 svn(没有 .classpath .target ... 只有 src 文件夹)和 eclipse:eclipse 恢复项目时,一切都在 target-maven 中构建。

4

2 回答 2

1

您可以为此创建不同的配置文件mvn-eclipse为 Eclipse 和mvn-cmd指定不同目标目录的命令行创建配置文件。您需要在 Eclipse Launch Configurations 中激活配置文件(选择Run as -> Maven Build ...并出现该Profiles字段),或者您可以创建两个不同的settings.xml. 在您指定的一个

  <activeProfiles>
    <activeProfile>mvn-eclipse</activeProfile>
  </activeProfiles>

而在另一个

  <activeProfiles>
    <activeProfile>mvn-cmd</activeProfile>
  </activeProfiles>

您应该将包含的设置文件命名mvn-cmd为活动配置文件settings.xml,以便在命令行上使用 maven 时不必进行任何更改。在 Eclipse 中,您可以通过Preferences -> Maven -> User settings.

但是我不建议这样做,因为您可能会遇到两个输出文件夹不同步的问题。因此,请务必为此提供充分的理由。

于 2012-10-09T07:14:13.650 回答
0

作为对第一个答案的回应,这是为 Maven 和 Eclipse 设置单独的输出文件夹的正当理由:

我正在尝试处理一个相当大的基于 Maven 的项目(200 多个子项目),涉及最新的 Scala(2.13),Eclipse 不支持该项目。Scala-IDE 在 2.12 时实际上已经死了。没有它,在 Eclipse 中进行干净的构建将删除 Maven 编译的 Scala 类并彻底破坏一切。我不确定是否需要提及 m2e 也无法使用。

所以这一切都以几行 perl 来修复我的工作区而告终。相信我,我已经尝试了很多其他方法。这个解决方案仍然需要我在另一个脚本步骤中将已编译的 Scala 类提供给 Eclipse,但这并不是真正的问题。

此解决方案不会更改 Maven 的,而是 Eclipse 的输出文件夹,方法是调整.classpathmvn 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
于 2019-12-19T23:44:13.377 回答