maven似乎没有按顺序编译 - 未找到符号

时间:2012-09-20 03:31:17

标签: java maven compiler-errors

我刚刚将一个项目从ant转换为maven,并且在构建一个类似于源文件的行为没有按正确顺序编译的jar时出错。我有一个枚举类型,如下所示:

public enum LmsError implements ILmsError {
    UC0001() {
        @Override
        public String msg() {
            return this.getClass().getName() + "-" + this + ": constructor failed: ";
        }
    },

界面如下所示:

public interface ILmsError {
    public abstract String msg();
}

...这是使用它的代码示例。 'throws'行是下面的错误消息抱怨的那一行,但如果我注释掉该语句,则下次引用msg()方法时会出现类似的错误。使用枚举的哪个元素并不重要。

} catch (Exception e) {
      throw new RuntimeException(LmsError.UC0001.msg() + "Unable to construct status based on " + codeEnumeration + ":" + e.getMessage(), e);
}

mvn clean compile

[compiler:compile]
Compiling 129 source files to C:\bsaastad\workspaces\theportaltree\redirect\redirect-ejb\target\classes
-------------------------------------------------------------
COMPILATION ERROR : 
-------------------------------------------------------------
com/theportaltree/redirect/status/RedirectStatus.java:[156,58] cannot find symbol
symbol  : method msg()
location: class com.theportaltree.lms.LmsError
1 error

如果我在没有干净的情况下再次编译,我会得到类似的东西(有时需要两个额外的编译来完成所有文件):

[compiler:compile]
Compiling 89 source files to C:\bsaastad\workspaces\theportaltree\redirect\redirect-ejb\target\classes

[resources:testResources]

干净的编译。

如果我在失败后查看输出目录,我看到没有生成的枚举类存在,这解释了错误。一旦我成功编译,枚举类就像预期的那样。

这都属于同一个项目,所以我不认为这是一个依赖问题。我只是将它从一个蚂蚁构建转换为maven(maven newbie),它已经编译了几年没有问题。这是pom.xml中的插件部分。有什么遗失的吗?错误的版本的东西?我很难过:

<build>
    <plugins>
    <plugin>
      <groupId>org.apache.maven.plugins</groupId>
      <artifactId>maven-compiler-plugin</artifactId>
      <version>2.5.1</version>
      <configuration>
        <!-- put your configurations here -->
        <source>1.6</source>
        <target>1.6</target>
      </configuration>
    </plugin>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-ejb-plugin</artifactId>
            <version>2.3</version>
            <configuration>
                <ejbVersion>3.1</ejbVersion>
            </configuration>
        </plugin>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-javadoc-plugin</artifactId>
            <version>2.8.1</version>
            <configuration>
                <!-- javadoc configuration options here -->
            </configuration>
        </plugin>
    </plugins>
</build>

非常感谢任何帮助/想法。

2 个答案:

答案 0 :(得分:2)

您是否在执行命令行Maven构建的同时运行IDE?

我发现有时候如果你的IDE是Maven感知的(例如带有m2Eclipse插件的Eclipse),你可能会在两个“赛车”Maven引擎之间进行不希望的交互。

如果关闭IDE会产生可靠的干净构建,请检查其配置选项 - 它可能会轮询文件系统以进行更改,这反过来会启动(干​​净?)构建。

答案 1 :(得分:1)

尝试从命令行运行maven(与您现在运行的mvn clean编译相同)。

BTW执行接口ILmsError,枚举LmsError以及抛出运行时异常并使用该消息驻留在同一模块中的代码? 也许它只是缺乏“依赖”?