代码之家  ›  专栏  ›  技术社区  ›  Daniel Cassidy

Eclipse设置会影响Maven命令行构建吗?

  •  4
  • Daniel Cassidy  · 技术社区  · 16 年前

    java.lang.Error: Unresolved compilation problems:
            Access restriction: The type TextSerializer is not accessible due to res
    triction on required library C:\Program Files\Java\jre1.5.0_15\lib\rt.jar
    

    最终我发现问题出在 日蚀 .我转到了“首选项”>Java>编译器>错误/警告>已弃用并限制API,并将“禁止引用”更改为“警告”。此后,我的构建开始工作。这对我来说是完全无法理解的,因为我在构建时遇到了错误 从命令行 .

    有人能向我解释一下 日蚀 设置会以某种方式影响命令行构建的行为吗?!

    5 回复  |  直到 16 年前
        1
  •  4
  •   Pascal Thivent    16 年前

    你面对 Compilation errors on restricted classes m2eclipse常见问题中提到的问题,并应用了常见问题中建议的相同解决方案:

    使用类的项目 rt.jar , 例如 com.sun.* (以及其他一些) “访问限制:RE类型为 由于限制,无法访问 必需的库 /lib/rt.jar”。这样的错误 指示使用非API类,以及 这些访问规则由以下内容定义 Eclipse JDT。

    您可以将编译器设置更改为 不要辜负这些限制 Window中的工作区设置/ 首选项/Java/编译器/ 错误/警告/弃用和 受限API/禁止引用 (访问规则)/警告;或 项目/物业中的每个项目 /Java编译器/错误/警告 /已弃用且受限制的API/ 禁止引用(访问规则)/ 警告

    当然,这不会影响Eclipse之外的JDK。话虽如此,您在评论中写道,Eclipse将使用与Maven相同的JRE,但是。..Maven需要一个JDK来编译类(它需要javac)。所以我的猜测是,你实际上是在使用一个非javac编译器,并且有一个 compilerId 在某个地方宣布。大致如下:

    <plugin>
      <artifactId>maven-compiler-plugin</artifactId>
      <configuration>
        <compilerId>eclipse</compilerId>
      </configuration>
      <dependencies>
        <dependency>
          <groupId>org.codehaus.plexus</groupId>
          <artifactId>plexus-compiler-eclipse</artifactId>
          <version>xxxx</version>
        </dependency>
      </dependencies>
    </plugin>
    

    编辑: 根据评论,上述假设不适用于OP。

    我的下一个建议是试着重现这个问题,但要跑 mvn clean 之前 compile 例如。:

    mvn clean install
    

    据报道,这似乎解决了问题(正如我所料)。我本应立即想到这一点:Eclipse甚至为有编译错误的类生成.class文件。因此,maven命令行级别的(不太)奇怪行为由一个 clean .

    实际上,我的建议是使用中提到的设置 How to configure Maven project to use separate output folders in Eclipse 以避免任何类似的问题。这实际上是m2eclipse 0.9.4版本之前的默认设置。这一变化的原因在 this dev-list thread .

        2
  •  1
  •   Chris Beach    13 年前

    我发现为Eclipse构建提供一个与Maven CLI构建分开的目录是有帮助的:

    <profiles>
      <profile>
        <id>IDE</id>
        <activation>
          <property>
            <name>m2e.version</name>
          </property>
        </activation>
        <build>
          <!-- Put the IDE's build output in a folder other than target, so that IDE builds don't interact with Maven builds -->
          <directory>target-ide</directory>
        </build>
    </profile>
    
        3
  •  0
  •   Daniel Cassidy    16 年前

    我的同事很有帮助地指出 mvn clean install 修复问题。最终我们发现(M2)Eclipse将一些部分编译的类留在目标目录中,当然vanilla Maven不知道它应该重新编译这些类。我对此有点恼火。任何人都应该清楚,在目标目录中留下损坏的输出必然会微妙地污染后续的构建。

        4
  •  0
  •   rogerdpack    16 年前

    是的,“干净”是关键 但是请注意,这不仅仅是因为它有失败的构建——不知何故,或者其他m2eclipse只会留下垃圾,即使它编译正确。

    java.lang.Error:未解决的编译问题:

        5
  •  0
  •   kldavis4    15 年前

    我在Maven项目中使用Netbeans(6.9.1)时也看到了类似的问题。 mvn clean 解决了这个问题。

    推荐文章