【问题标题】:Maven "cannot find symbol" error on Linux but not WindowsLinux上的Maven“找不到符号”错误,但不是Windows
【发布时间】:2013-07-07 17:02:37
【问题描述】:

我的问题类似于: maven compilation failure 但没有任何解决方案奏效。

我有两个 maven 项目:A 是 B 的依赖项。我可以在 Windows 7(我的开发机器)和 Linux(AWS EC2 实例)上成功编译、测试、打包和安装 A。我还可以在 Windows 7 上编译、测试、打包和安装 B。但是,当我尝试在 Linux 上编译 B 时,maven 会出现“找不到符号”错误:

    # mvn clean package install                                                                                                                 
    [INFO] Scanning for projects...
    [INFO]                                                                         
    [INFO] ------------------------------------------------------------------------
    [INFO] Building xxxxx-api Maven Webapp 1.0-SNAPSHOT
    [INFO] ------------------------------------------------------------------------
    [INFO] 
    [INFO] --- maven-clean-plugin:2.4.1:clean (default-clean) @ xxxxx-api ---
    [INFO] Deleting /secure-mnt/xxxxx-api/target
    [INFO] 
    [INFO] --- maven-resources-plugin:2.6:resources (default-resources) @ xxxxx-api ---
    [INFO] Using 'UTF-8' encoding to copy filtered resources.
    [INFO] Copying 5 resources
    [INFO] 
    [INFO] --- maven-compiler-plugin:3.0:compile (default-compile) @ xxxxx-api ---
    [INFO] Changes detected - recompiling the module!
    [INFO] Compiling 20 source files to /secure-mnt/xxxxx-api/target/classes
    [INFO] -------------------------------------------------------------
    [ERROR] COMPILATION ERROR : 
    [INFO] -------------------------------------------------------------
    [ERROR] /secure-mnt/xxxxx-api/src/main/java/com/company/util/Logging.java:[21,13] cannot find symbol
      symbol: class CryptoLogging
    [ERROR] /secure-mnt/xxxxx-api/src/main/java/com/company/util/Logging.java:[32,39] cannot find symbol
      symbol:   method getLogger(java.lang.String)
      location: class com.company.util.Logging
    [INFO] 2 errors 
    .....                                                                                                              

我在两个系统上都安装了相同版本的 Java (1.7.0_25) 和 Maven (3.0.5),并且两者都使用来自 Git 的相同源代码版本。

运行mvn dependency:list 不会显示任何警告。 Project A jar 位于 Linux 服务器上的本地 m2 存储库中,并且确实具有可用的类和方法。

似乎 Maven 并没有让 Java 编译器知道 Linux 上的 Project A jar,但我不明白为什么。 Maven 是否无法正确指定 Java 类路径?

有人对尝试或测试的东西有什么建议吗?

如果相关:

# mvn -version                                                                                                                              
Apache Maven 3.0.5 (r01de14724cdef164cd33c7c8c2fe155faf9602da; 2013-02-19 13:51:28+0000)
Maven home: /usr/local/apache-maven/apache-maven-3.0.5
Java version: 1.7.0_25, vendor: Oracle Corporation
Java home: /usr/java/jdk1.7.0_25/jre
Default locale: en_US, platform encoding: UTF-8
OS name: "linux", version: "3.4.48-45.46.amzn1.x86_64", arch: "i386", family: "unix"

由于我确定有人会要求查看 POM,因此这里是项目 B 的相关部分。依赖项没有什么特别之处:

<dependencies>
<!-- For Project A. -->
<dependency>
  <groupId>com.company.projectA</groupId>
  <artifactId>company-projectA</artifactId>
  <version>1.0-SNAPSHOT</version>
</dependency>

<!-- For RESTful services. -->
<dependency>
    <groupId>com.google.code.gson</groupId>
    <artifactId>gson</artifactId>
    <version>2.2.2</version>
</dependency>

<!-- For testing. -->
<dependency>
  <groupId>junit</groupId>
  <artifactId>junit</artifactId>
  <version>4.10</version>
  <scope>test</scope>
</dependency>
</dependencies>

非常感谢您的帮助。

【问题讨论】:

  • 即使我将存储库显式设置为默认值 (export M2_REPO=~/.m2/repository) 并使用 mvn -o clean package install 在离线模式下运行,这仍然会失败。包 A 安装到本地存储库,但包 B 找不到它。

标签: linux amazon-web-services maven-3


【解决方案1】:

经过进一步研究,结果证明这根本不是 maven 问题。某些文件具有不正确的 UNIX 权限,这在某种程度上导致了误导性错误。在确保所有工作目录都已正确 chown'd 和 chmod'd 之后,构建工作。

【讨论】:

  • 我知道这是一篇旧帖子,但我很想知道哪些文件的权限不正确。我现在可能遇到同样的问题,我觉得我正在用这个 Dockerfile 解决这个问题:``` FROM maven:3.6.3-jdk-8-slim RUN groupadd mygroup -g 123 \ && useradd -m myuser -u 234 -g 123 -d /home/user 运行 mkdir -p /root/.m2 && chown myuser:mygroup -R /root USER myuser WORKDIR /home/user COPY 。 . CMD ["mvn", "clean", "install", "-DskipTests", "-e"] ``
猜你喜欢
  • 2017-05-10
  • 2020-05-23
  • 2015-11-06
  • 1970-01-01
  • 2016-12-02
  • 2019-05-31
  • 1970-01-01
  • 1970-01-01
  • 2019-05-07
相关资源
最近更新 更多