使用带有 WTP 的 Maven Eclipse 插件的怪癖

发布于 2024-10-04 16:34:25 字数 1524 浏览 8 评论 0原文

我正在使用 Maven Eclipse 插件生成 wtp 项目。它基本上可以工作,但有一些我想摆脱的奇怪怪癖:

  • 每次运行 mvn eclipse:eclipse 时都必须指定 -Dwtpversion=2.0。否则,不会生成构面信息。
  • javafacet级别设置为版本1.4而不是6.0,这导致每个生成的项目都有错误Java编译器级别与安装的Java项目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>

I'm using the maven eclipse plugin to generate wtp projects. It mostly works, but there are some strange quirks that I'd like to get rid of:

  • I must specify -Dwtpversion=2.0 each time I run mvn eclipse:eclipse. Otherwise, facet information is not generated.
  • The java facet level is set to version 1.4 instead of 6.0, which causes each generated project to have an error Java compiler level does not match the version of the installed Java project facet

How do I get rid of these quirks?

Below is my top-level 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>

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

猫瑾少女 2024-10-11 16:34:25

我有同样的问题。
我通过在 声明中将编译器插件的源版本和目标版本设置为预期版本来修复此问题:

<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。

I had the same issue.
I fixed it by setting the source and target version of the compiler-plugin to the expected version in a <plugin-management> declaration:

<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>

Note that using the user properties maven.compiler.target and maven.compiler.souce instead of the plugin configuration, still makes the eclipse plugin to generate a 1.4 java facet.

初心 2024-10-11 16:34:25

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

更新:
抱歉,maven eclipse 插件仍然存在。查看了问题跟踪系统。

首先

,第一眼看到时,我毫无头绪。 源代码告诉我们,它是一个简单的mojo参数(可以来自配置标签)。您唯一可以考虑的是,该配置在 POM 内共享(根据我的经验)。因此,如果您在 POM 顶部使用插件,并且也在底部使用,则配置是共享的(或相同的),这可能是两者的一些总结(应在源代码中检查)。因此 wtpversion 可能碰巧在 POM 中的其他位置定义,或者在 父 POM 中定义。该定义只能被环境条目覆盖。引自 Maven 文档

指定用于
计算要注入的值
进入 Mojo 的这个参数
构建时间。给出的表达式为
默认值通常用于
参考 POM 中的特定元素,
例如${project.resources},其中
指的是资源列表
陪伴课程
生成的 JAR 文件。当然,
默认值不必是
表达式,但也可以是简单的
常量,如 true 或 1.5。而对于
String 类型的参数可以混合使用
具有文字值的表达式,例如
${project.artifactId}-${project.version}-特殊。
系统属性由下式给出
表达式使用户能够覆盖
命令中的默认值
通过 -DaSystemProperty=value 行。
注意:如果既没有默认值也没有
表达式被指定,则
参数只能从配置
POM。 '${' 和 '}' 的使用是
需要分隔实际表达式
可以对其进行评估。

...

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

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

插件执行第二

对于第二个,我认为您应该在additionalfacets 中声明 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 插件。

You do something wrong. You can use maven-eclipse-plugin (which is discontinued or at least not developed anymore), or use m2eclipse. Not both. Use m2eclipse, but make sure, that you installed m2eclipse extras as well. For some strange reasons these are two update sites, not only one. If you install extras successfully, and use standard web or ejb artifacts, eclipse configuration will be rendered by m2eclipse extras automatically if you use project creation wizard of m2eclipse.

UPDATE:
Sorry, maven eclipse plugin is still alive. Took a look at Issue tracking system.

First

For the first sight, I have no clue. The source code tells, that it is a simple mojo parameter (that can come from configuration tag). The only thing you can consider is, that configuration is shared inside a POM (according to my experience). So if you use a plugin at the top of the POM, and you use at the bottom as well, the configuration is shared (or the same), which is probably some summary of the two (should be checked in source). So wtpversion may happen to be defined somewhere else inside your POM, or in the parent POMs. This definition can be overridden by only an environment entry. Quotes from Maven documentation:

Specifies the expressions used to
calculate the value to be injected
into this parameter of the Mojo at
buildtime. The expression given by
default-value is commonly used to
refer to specific elements in the POM,
such as ${project.resources}, which
refers to the list of resources meant
to accompany the classes in the
resulting JAR file. Of course, the
default value need not be an
expression but can also be a simple
constant like true or 1.5. And for
parameters of type String one can mix
expressions with literal values, e.g.
${project.artifactId}-${project.version}-special.
The system property given by
expression enables users to override
the default value from the command
line via -DaSystemProperty=value.
NOTE: If neither default-value nor
expression are specified, the
parameter can only be configured from
the POM. The use of '${' and '}' is
required to delimit actual expressions
which may be evaluated.

...

The elements in the parent POM that
are inherited by its children are:

  • dependencies
  • developers and contributors
  • plugin lists
  • reports lists
  • plugin executions with matching ids
  • plugin configuration

Second

For the second I think you should state jst.java facet version in additionalfacets. Like this: in this POM:

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

Suggestion

M2eclipse has its own problems. On the other hand there is no need to hack your POM just because of Eclipse. So until it fits Your need, You should use m2ecipse + extras instead of maven eclipse plugin.

街道布景 2024-10-11 16:34:25

对于 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>

For the jst.web version the Maven eclipse pluging takes into accound the dependencies of the project. If you have a servlet api dependency defined :

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

You jst.web parameter will be 6.0

<faceted-project>
  ...
  <installed facet="jst.web" version="6.0"/>
  ...
</faceted-project>
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文