问题标签 [maven-compiler-plugin]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
4 回答
6393 浏览

java - 如何在不破坏 Maven 发布插件的情况下传递 javac 多个命令行参数,其中一些参数包括冒号?

当我忘记在类中声明 serialVersionUIDs 时,我想让我的 Maven 构建失败Serializable。有了javac,这很容易:

直接将其翻译为 Maven 不起作用:

compilerArgument引用,因此javac只接收一个参数,包含-Xlint:serial -Werror, 而不是-Xlint:serial-Werror作为单独的参数。所以你阅读了文档,发现compilerArguments

这看起来很奇怪 - 冒号serial在命名空间中创建元素Xlint,它没有在任何地方声明 - 但它可以工作......直到你想要发布:

$ mvn release:prepare

org.apache.maven.lifecycle.LifecycleExecutionException: Failed to execute goal org.apache.maven.plugins:maven-release-plugin:2.3.2:prepare (default-cli) on project my-project: Error reading POM: Error on line 58: The prefix "Xlint" for element "Xlint:serial" is not bound.

显然,常规 POM 阅读器以另一种方式处理 XML 命名空间,而不是发布插件使用的方式。

那么,javac当其中一些开关包含对纯 XML 元素无效的字符时,如何在不破坏发布插件的情况下传递多个命令行开关?

0 投票
1 回答
7165 浏览

java - 什么是默认注释处理器发现过程?

Maven Compiler 插件的文档提到以下内容

注释处理器:

要运行的注释处理器的名称。仅适用于 JDK 1.6+ 如果未设置,则应用默认注释处理器发现过程。

这里默认的注释处理器发现过程是什么?除了这个配置标签,还有其他方法可以设置注释处理器吗?

我发现注释处理工具入门(apt)文档提到了一个默认的发现过程,但它适用于工厂类而不是处理器,不幸的是它使用了 JDK 中的tools.jarcom.sun包。这是默认的注释处理器发现过程吗?

0 投票
2 回答
1849 浏览

java - Maven webapp“javac:-endorseddirs 需要一个参数”

我有一个使用 maven-compiler-plugin 的 Maven webapp。几天前,我可以很好地编译和运行该应用程序,但是发生了一些事情,现在编译失败并出现以下错误:

它与编译器有关,但我无法理解。这是我的 pom.xml(只是插件):

我已经尝试过一些这样的解决方案

0 投票
0 回答
282 浏览

maven - 编译的类与 maven 目标“编译”不同,并在目标文件夹中自动生成

在 Spring3+Maven+Tomcat6 Web 项目中..

我尝试在 REST api Controller 中使用相同的 RequestMapping。
因为..我需要不同用途的不同战争。

所以,我生成了同名控制器,但不同的包。
例如...
1. xxx.controller.agent.UserController
2. xxx.controller.console.UserController

在 pom.xml..
1. maven -> build(war:war) -> get console.war include xxx.controller.agent.UserController
2. 取消注释 testExcludes 中
的注释行并排除 3. 注释 testExcludes 中未注释的行并排除
4. maven -> 更新项目配置
5. maven -> build (war:war) -> get agent war include xxx.controller.console.UserController

但是,我不想为每个战争版本编辑 pom.xml。我尝试使用 Maven 配置文件元素构建每个战争文件。所以,我编辑了我的 pom.xml,如下所示..

和 Maven 构建..(goal="package" 或 "compile war:war", profile="console" 或 "agent" 在每种情况下)
构建成功..(无编译错误)但战争异常。
我将war文件复制到tomcat webapp目录,并执行startup.bat文件。
在控制台日志中..发生了很多错误。
也许我认为 maven compile 有一些问题。
我解压了每个构建方法的war文件(使用配置文件和旧方法)。
但是,类文件的数量不同......

感谢您的帮助,非常感谢!

0 投票
14 回答
244522 浏览

maven - Maven 内存不足构建失败

截至今天,我的 Maven 编译失败。

[错误] 内存不足;要增加内存量,请在启动时使用 -Xmx 标志(java -Xmx128M ...)

截至昨天,我已经成功运行了一个 Maven 编译。

截至今天,我刚刚将堆增加到3 GB。另外,我只更改了 2-3 行小代码,所以我不理解这个“内存不足”错误。

编辑:我通过更改失败模块的 pom.xml 来尝试发布者的评论。但我得到了同样的 Maven 构建错误。

0 投票
1 回答
1884 浏览

maven-3 - 如何使用 exec 插件运行 maven compile 两次?

我有一个简单的代码生成器 G,它从我的项目中读取一个接口 A 并从中生成一个新的接口 B。因此我需要实现这一点:

  1. 编译 A
  2. 执行 G
  3. 编译 B

第 1 步和第 3 步由 maven-compiler-plugin 处理,而第 2 步我使用 maven-exec-plugin。目前第 1 步和第 2 步运行良好,但我不知道如何再次运行编译器插件来编译新生成的 B 版本。

maven可以做到这一点,还是有另一种方法可以解决我的问题?

解决方案:

根据 khmarbaise 的回答,我将其添加到我的 pom.xml 中,以让第一次编译在generate-sources阶段运行,并在process-sources阶段生成代码,使生成的类在编译阶段可用:

0 投票
1 回答
2614 浏览

java - 自定义注释处理、生成文档和 Maven 3

我的目标是“读取”某个包的 Java 类,然后处理该包中的类和这些类中的方法上的 Javadoc 和注释(最好同时)。解决方案必须在 Java 6 或 7 中实现,构建工具是 Maven 3。我们目前正在使用maven-compiler-plugin, version 2.5.1,但如果可用/必要,我可能会进一步升级。

据我了解,这些javax.annotation.processing类的目的是做这种事情,我相信按照这个其他 SO 答案的 Java 代码应该适用于我的目的,但是如何让它实际运行的实际细节仍然是有点模糊。

说了这么多,这就是我认为我需要的:

  1. Java 代码挑选出我想要的注释和 Javadoc 项目,然后将这些项目转换为创建我的自定义文档所需的数据模型。
  2. Java 代码,然后将此数据模型写入 docs 文件或文件目录
  3. Maven 3 配置为:
    1. 适时运行一次注释处理器
    2. 在输出的war文件中包含生成的docs目录

Maven 位比 Java 代码更让我感到困惑,所以如果你只回答一半,那就是我的复选标记的一半。此外,我的偏好是不要将此注释处理器作为单独的插件放入 Maven 存储库,因为它将与我们正在使用的一些自定义注释紧密耦合。

以下是我发现的相关问题的简短列表,但我无法综合自己的答案:

0 投票
3 回答
3488 浏览

java - 使用 Maven 编译 Java 代码时出现 ArrayIndexOutOfBoundsException

仅在运行时出现以下错误mvn clean

我使用的环境如下:

  • 日食伽利略
  • Java 1.6.0_34(64 机器上的 32 位)
  • JBoss 缝 2.2
  • JBoss AS 5.1

可能是什么问题呢?

0 投票
3 回答
10366 浏览

maven - 如何让 Maven 从修改的代码(delombok'd)而不是从 src/main/java 编译

使用 delombok maven 插件将我的所有文件放在“target/generated-sources/delombok”中。当我尝试运行 maven 编译器时,它会抱怨重复的类,所以我按照这个问题的建议将 addOutputDirectory 设置为 false 。现在的问题是 delombok 的文件被忽略了,因此编译器抱怨缺少方法。

如何告诉 maven 编译器插件忽略默认的“src/main/java”目录,而是使用“target/generated-sources/delombok”目录进行编译?

当编译器运行时,运行 mvn compile -X 会产生以下输出:

然后再往下打印命令行选项,我可以看到 -sourcepath 参数是:-sourcepath C:\Users\Jamey.Holden\workspace\Apollo\Website\src\main\java;C:\Users\Jamey.Holden\workspace\Apollo\Website\target\generated-sources\java; 这些都不是 delombok 目录,所以它在尝试编译时找不到所有的 getter 和 setter 是很公平的。

更新 我想我已经找到了问题的根源。我正在设置 proc=none 以防止注释处理,因为我正在使用 queryDSL 生成元实体,并且当未设置此项以避免注释处理时,编译器发现重复实体错误。删除 proc=none 和 querydsl 注释处理器解决了这个问题。现在我只是去让 m2e 再次工作。

0 投票
3 回答
5398 浏览

maven - maven编译插件,build helper插件不生成class文件

我正在尝试将现有项目转换为 Maven 项目。它有 3 个模块,其中一个模块有多个源文件夹。 http://i.imgur.com/jZCnR.png

maven clean and install 或 eclipse clean 不会在 classes 和 test-classes 文件夹中创建类文件。项目结构是由那里没有类文件创建的。

以下插件配置在父 pom.xml 中定义。

我究竟做错了什么?