Java 为什么用于eclipse的m2e插件会向src插入可选属性?它的作用是什么

Java 为什么用于eclipse的m2e插件会向src插入可选属性?它的作用是什么,java,eclipse,maven,m2e,eclipse-jdt,Java,Eclipse,Maven,M2e,Eclipse Jdt,在运行Maven->Update Project…工具并选中Update Project configuration from pom.xml选项后,我开始注意到.classpath文件中的这些属性: <?xml version="1.0" encoding="UTF-8"?> <classpath> <classpathentry kind="src" output="target/classes" path="src"> <a

在运行
Maven->Update Project…
工具并选中
Update Project configuration from pom.xml
选项后,我开始注意到.classpath文件中的这些属性:

<?xml version="1.0" encoding="UTF-8"?>
<classpath>
    <classpathentry kind="src" output="target/classes" path="src">
        <attributes>
            <attribute name="optional" value="true"/>
            <attribute name="maven.pomderived" value="true"/>
         </attributes>
    </classpathentry>
    ...
</classpathentry>

...
最让我惊讶的是:


它有什么作用?这看起来非常可疑,因为我在一个项目中没有发现任何关于java源文件的可选文件夹。

之所以添加此选项,是因为
src
文件夹是maven的可选文件夹。如果缺少
src
,项目不应抱怨。(实际上,默认情况下,这应该是
src/main/java
src/test/java
)。这意味着作为源文件添加或删除
src
不需要更新maven配置


这个属性在您的例子中不需要存在,但它清楚地表明,只要可以编译所有内容,maven就不关心源文件夹是否存在(因此Eclipse也不应该关心)。

我对Eclipse的内部工作原理不太了解,但是您可以在没有src文件夹的情况下使用maven项目(例如,父项目和聚合项目)。如果没有
可选项
,上述类路径配置将中断此类项目。是的,但该项目是java项目,它有一个源文件夹。没有任何可选项。取决于您对“可选”的定义。没有“src”,它仍然是一个有效的maven项目。在pom中,您没有指定该文件夹不是可选的(我怀疑);因此,您可能需要该文件夹,但它对于所有涉及的工具都是可选的。因此,问题变成了-我如何告诉Maven该文件夹不是可选的?如果这是可能的话…您可以尝试显式设置,但也可以是m2e默认设置该属性。也许您应该在他们的邮件列表中询问您可以做什么…o使用一个不需要半成熟插件的插件来构建maven项目;)这似乎是多余的。如果我有源文件夹,它显然是这个特定项目所需要的。如果我不这样做,那就不需要了。我并不觉得有必要就此与m2e/Maven争论。我觉得它是不必要的,因为我看不到这样一个属性的用例。无论您是否认为它是多余的,这就是m2e的实现方式。:-)我猜做出这个决定的原因是,如果您的项目最初没有src/main/java文件夹,并且添加了一个,那么它将由maven处理,并由m2e控制。