1

我正在使用 maven eclipse 插件来生成 wtp 项目。它主要是有效的,但是我想摆脱一些奇怪的怪癖:

  • 我必须-Dwtpversion=2.0在每次运行时指定mvn eclipse:eclipse。否则,不生成分面信息。
  • java facet级别设置为1.4版本而不是6.0版本,导致每个生成的项目都会报错Java compiler level does not match the version of the installed Java project facet

我该如何摆脱这些怪癖?

下面是我的顶级 pom.xml。

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <groupId>com.example.foo</groupId>
  <artifactId>foo</artifactId>
  <packaging>pom</packaging>
  <version>1.0-SNAPSHOT</version>
  <name>foo</name>
  <url>http://maven.apache.org</url>
  <modules>
    <module>module1</module>
    <module>module2</module>
  </modules>
  <build>
    <plugins>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-eclipse-plugin</artifactId>
        <version>2.8</version>
        <configuration>
          <wtpversion>2.0</wtpversion>
          <additionalProjectFacets>
            <jst.web>3.0</jst.web>
          </additionalProjectFacets>
        </configuration>
      </plugin>
    </plugins>
  </build>
</project>
4

3 回答 3

2

我遇到过同样的问题。我通过在声明中将编译器插件的源版本和目标版本设置为预期版本来修复它<plugin-management>

<build>
    <pluginManagement>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.1</version>
                <configuration>
                    <source>1.7</source>
                    <target>1.7</target>
                </configuration>
            </plugin>
        </plugins>
    </pluginManagement>
</build>

请注意,使用用户属性maven.compiler.targetmaven.compiler.souce不是插件配置,仍然会使 eclipse 插件生成 1.4 java facet。

于 2014-08-15T08:37:03.207 回答
1

你做错了什么。您可以使用 maven-eclipse-plugin(已停产或至少不再开发),或使用 m2eclipse。不是都。使用 m2eclipse,但要确保你也安装了 m2eclipse extras。由于某些奇怪的原因,这是两个更新站点,而不仅仅是一个。如果您成功安装了 extras,并使用标准的 web 或 ejb 工件,如果您使用 m2eclipse 的项目创建向导,m2eclipse extras 将自动呈现 eclipse 配置。

更新:对不起,maven eclipse 插件还活着。看看问题跟踪系统。

第一的

乍一看,我不知道。源代码告诉它,它是一个简单的 mojo 参数(可以来自配置标签)。您唯一可以考虑的是,该配置在 POM 中共享(根据我的经验)。所以如果你在POM的顶部使用一个插件,并且你也在底部使用,配置是共享的(或相同的),这可能是两者的一些总结(应该在源代码中检查)。因此 wtpversion 可能恰好在您的 POM 内的其他地方或父 POM中定义。此定义只能由环境条目覆盖。来自 Maven文档的引用:

指定用于计算要在构建时注入 Mojo 的此参数的值的表达式。default-value 给出的表达式通常用于指代 POM 中的特定元素,例如 ${project.resources},它指的是与生成的 JAR 文件中的类一起使用的资源列表。当然,默认值不必是表达式,也可以是简单的常量,如 true 或 1.5。对于字符串类型的参数,可以将表达式与文字值混合,例如 ${project.artifactId}-${project.version}-special。由表达式给出的系统属性使用户可以通过 -DaSystemProperty=value 从命令行覆盖默认值。注意:如果既没有指定默认值也没有指定表达式,该参数只能从 POM 配置。需要使用 '${' 和 '}' 来分隔可以计算的实际表达式。

...

父 POM 中由其子代继承的元素是:

  • 依赖关系
  • 开发者和贡献者
  • 插件列表
  • 报告列表
  • 具有匹配 id 的插件执行
  • 插件配置

第二

对于第二个,我认为您应该在附加方面说明 jst.java 方面版本。像这样:在这个 POM 中

<additionalProjectFacets>
    <jst.java>5.0</jst.java>
    <jst.ejb>3.0</jst.ejb>
    <jpt.jpa>1.0</jpt.jpa>
</additionalProjectFacets>

建议

M2eclipse 有它自己的问题。另一方面,没有必要仅仅因为 Eclipse 就破解你的 POM。因此,在满足您的需要之前,您应该使用 m2ecipse + extras 而不是 maven eclipse 插件。

于 2010-11-30T09:07:32.613 回答
0

对于 jst.web 版本,Maven eclipse 插件会考虑项目的依赖关系。如果您定义了 servlet api 依赖项:

<dependency>
    <groupId>org.apache.tomcat</groupId>
    <artifactId>servlet-api</artifactId>
    <version>6.0.32</version>
</dependency> 

您的 jst.web 参数将为 6.0

<faceted-project>
  ...
  <installed facet="jst.web" version="6.0"/>
  ...
</faceted-project>
于 2011-05-10T20:49:48.483 回答