首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >maven构建在某些环境中失败,但随后在同一目录的副本中成功构建

maven构建在某些环境中失败,但随后在同一目录的副本中成功构建
EN

Stack Overflow用户
提问于 2018-03-16 01:41:07
回答 1查看 115关注 0票数 0

我希望有人能提供一些见解,一些建议,甚至只是给我一个方向,试图解决这个奇怪的问题。

在一些环境中,例如我们的Jenkins服务器,甚至有时在开发人员机器上,如果这个特定的项目是从git代码库克隆的,然后在其上运行maven构建,构建将失败,打印大量递归堆栈跟踪并抛出stackoverlow错误。

代码语言:javascript
复制
$ git clone git@git@bitbucket.org:company/project.git
$ cd project
$ mvn clean install -DskipTests
$ <Fails with stacktrace seen below>

在构建失败的情况下,如果我使用"cp -r“创建项目目录的副本,然后在新创建的目录中运行构建...构建成功,没有任何问题。(!)

代码语言:javascript
复制
$ cp -r project project_copy-r
$ cd project_copy-r
$ mvn clean install -DskipTests
$ <Build succeeds with no errors>

如果我使用"cp -a“复制项目目录,然后在新复制的目录中运行maven构建,构建将失败,并显示与原始目录相同的错误。(!!)

代码语言:javascript
复制
$ cp -a project project_copy-a
$ cd project_copy-a
$ mvn clean install -DskipTests
$ <Fails with stacktrace seen below>

如果我使用"cp -rp“创建项目目录的副本,然后在新创建的目录中运行构建,构建将再次失败,并返回相同的错误。

代码语言:javascript
复制
$ cp -rp project project_copy-rp
$ cd project_copy-rp
$ mvn clean install -DskipTests
$ <Fails with stacktrace seen below>

所以..。使用"-a“或"-rp”标志制作的副本与复制命令中的"-r“标志不同。这里一个显而易见的选择是,项目目录中的某些内容具有过度限制的权限,当只使用"-r“标志时,这些权限会被删除。

但是,如果我运行"sudo chmod -R 755 project_copy-rp“,我仍然得到相同的构建错误。同样,如果我运行"sudo chown -R me:me project_copy-rp“

代码语言:javascript
复制
$ sudo chmod -R 755 project_copy-rp 
$ cd project_copy-rp
$ mvn clean install -DskipTests
$ <Fails with stacktrace seen below>
$
$ chown -R me:me ../project_copy-rp 
$ mvn clean install -DskipTests
$ <Fails with stacktrace seen below>

此外,一旦使用"-a“或"-rp”复制了项目文件夹,隐藏在其中的任何问题似乎都会被“锁定”到副本中。此时,仅使用"-r“标志重新复制先前创建的目录不会导致构建错误消失。

代码语言:javascript
复制
$ cp -a project project_copy-a
$ cp -r project_copy-a project_copy-a-r
$ cd project_copy-a-r
$ mvn clean install -DskipTests
$ <Fails with stacktrace seen below>

在Jenkins服务器上,构建应该由包含Maven 3和Oracle Java 8的docker映像完成。构建再次失败,并显示相同的堆栈跟踪。为了测试这个问题,我使用git将项目的副本克隆到我在Jenkins服务器上的主目录中,安装了Maven3和Oracle Java 8,并从那里运行构建。它成功了,没有错误。

正如我所说的--如果任何人有任何想法,我将不胜感激。

堆栈跟踪:

代码语言:javascript
复制
[ERROR] Failed to execute goal org.codehaus.mojo:aspectj-maven-plugin:1.8:compile (default-compile) on project project-web: AJC compiler errors:
[ERROR] abort trouble in:
[ERROR] public class com.company.project.view.evaluation.EvaluationTagTreeInitTask extends java.lang.Object implements com.company.project.view.Task:
[ERROR] private final java.util.List rootNodes [Signature(Ljava/util/List<Lcom/company/project/view/tree/EvalTreeInputNode<TT;>;>;)]
[ERROR] private final com.google.common.base.Supplier rootNodeFactory [Signature(Lcom/google/common/base/Supplier<Lcom/google/common/base/Optional<Lcom/company/project/view/tree/EvalTreeInputNode<TT;>;>;>;)]
[ERROR] public void <init>(java.util.List, com.google.common.base.Supplier)    org.aspectj.weaver.MethodDeclarationLineNumber: 18:587
[ERROR] :
[ERROR] ALOAD_0     // Lcom/company/project/view/evaluation/EvaluationTagTreeInitTask; this   (line 18)
[ERROR] INVOKESPECIAL java.lang.Object.<init> ()V
[ERROR] constructor-execution(void com.company.project.view.evaluation.EvaluationTagTreeInitTask.<init>(java.util.List, com.google.common.base.Supplier))
[ERROR] |               ALOAD_0     // Lcom/company/project/view/evaluation/EvaluationTagTreeInitTask; this   (line 22)
[ERROR] |               ALOAD_1     // Ljava/util/List; rootNodes
[ERROR] | field-set(java.util.List com.company.project.view.evaluation.EvaluationTagTreeInitTask.rootNodes)
[ERROR] | |             PUTFIELD com.company.project.view.evaluation.EvaluationTagTreeInitTask.rootNodes Ljava/util/List;
[ERROR] | field-set(java.util.List com.company.project.view.evaluation.EvaluationTagTreeInitTask.rootNodes)
[ERROR] |               ALOAD_0     // Lcom/company/project/view/evaluation/EvaluationTagTreeInitTask; this   (line 23)
[ERROR] |               ALOAD_2     // Lcom/google/common/base/Supplier; rootNodeFactory
[ERROR] | field-set(com.google.common.base.Supplier com.company.project.view.evaluation.EvaluationTagTreeInitTask.rootNodeFactory)
[ERROR] | |             PUTFIELD com.company.project.view.evaluation.EvaluationTagTreeInitTask.rootNodeFactory Lcom/google/common/base/Supplier;
[ERROR] | field-set(com.google.common.base.Supplier com.company.project.view.evaluation.EvaluationTagTreeInitTask.rootNodeFactory)
[ERROR] |               RETURN   (line 24)
[ERROR] constructor-execution(void com.company.project.view.evaluation.EvaluationTagTreeInitTask.<init>(java.util.List, com.google.common.base.Supplier))
[ERROR] end public void <init>(java.util.List, com.google.common.base.Supplier)
[ERROR] 
[ERROR] public void execute(com.company.project.time.Time) throws java.lang.Exception    org.aspectj.weaver.MethodDeclarationLineNumber: 27:817
[ERROR] :
[ERROR] method-execution(void com.company.project.view.evaluation.EvaluationTagTreeInitTask.execute(com.company.project.time.Time))
[ERROR] |               ALOAD_0     // Lcom/company/project/view/evaluation/EvaluationTagTreeInitTask; this   (line 29)
[ERROR] | field-get(com.google.common.base.Supplier com.company.project.view.evaluation.EvaluationTagTreeInitTask.rootNodeFactory)
[ERROR] | |             GETFIELD com.company.project.view.evaluation.EvaluationTagTreeInitTask.rootNodeFactory Lcom/google/common/base/Supplier;
[ERROR] | field-get(com.google.common.base.Supplier com.company.project.view.evaluation.EvaluationTagTreeInitTask.rootNodeFactory)
[ERROR] | method-call(java.lang.Object com.google.common.base.Supplier.get())
[ERROR] | |             INVOKEINTERFACE com.google.common.base.Supplier.get ()Ljava/lang/Object;
[ERROR] | method-call(java.lang.Object com.google.common.base.Supplier.get())
[ERROR] |               CHECKCAST com.google.common.base.Optional
[ERROR] |               ASTORE_2
[ERROR] |               ALOAD_2     // Lcom/google/common/base/Optional; optRootNode   (line 30)
[ERROR] | method-call(boolean com.google.common.base.Optional.isPresent())
[ERROR] | |             INVOKEVIRTUAL com.google.common.base.Optional.isPresent ()Z
[ERROR] | method-call(boolean com.google.common.base.Optional.isPresent())
[ERROR] |               IFEQ L0
[ERROR] |               ALOAD_0     // Lcom/company/project/view/evaluation/EvaluationTagTreeInitTask; this   (line 32)
[ERROR] | field-get(java.util.List com.company.project.view.evaluation.EvaluationTagTreeInitTask.rootNodes)
[ERROR] | |             GETFIELD com.company.project.view.evaluation.EvaluationTagTreeInitTask.rootNodes Ljava/util/List;
[ERROR] | field-get(java.util.List com.company.project.view.evaluation.EvaluationTagTreeInitTask.rootNodes)
[ERROR] | method-call(void java.util.List.clear())
[ERROR] | |             INVOKEINTERFACE java.util.List.clear ()V
[ERROR] | method-call(void java.util.List.clear())
[ERROR] |               ALOAD_2     // Lcom/google/common/base/Optional; optRootNode   (line 33)
[ERROR] | method-call(java.lang.Object com.google.common.base.Optional.get())
[ERROR] | |             INVOKEVIRTUAL com.google.common.base.Optional.get ()Ljava/lang/Object;
[ERROR] | method-call(java.lang.Object com.google.common.base.Optional.get())
[ERROR] |               CHECKCAST com.company.project.view.tree.EvalTreeInputNode
[ERROR] |               ASTORE_3
[ERROR] |               ALOAD_3     // Lcom/company/project/view/tree/EvalTreeInputNode; rootNode   (line 34)
[ERROR] | method-call(void com.company.project.view.tree.EvalTreeInputNode.selectNode())
[ERROR] | |             INVOKEINTERFACE com.company.project.view.tree.EvalTreeInputNode.selectNode ()V
[ERROR] | method-call(void com.company.project.view.tree.EvalTreeInputNode.selectNode())
[ERROR] |               ALOAD_0     // Lcom/company/project/view/evaluation/EvaluationTagTreeInitTask; this   (line 35)
[ERROR] |               GETFIELD com.company.project.view.evaluation.EvaluationTagTreeInitTask.rootNodes Ljava/util/List;
[ERROR] |               ALOAD_3     // Lcom/company/project/view/tree/EvalTreeInputNode; rootNode
[ERROR] |               INVOKEINTERFACE java.util.List.add (Ljava/lang/Object;)Z
[ERROR] |               POP
[ERROR] |           L0: RETURN   (line 38)
[ERROR] method-execution(void com.company.project.view.evaluation.EvaluationTagTreeInitTask.execute(com.company.project.time.Time))
[ERROR] end public void execute(com.company.project.time.Time) throws java.lang.Exception
[ERROR] 
[ERROR] end public class com.company.project.view.evaluation.EvaluationTagTreeInitTask
[ERROR] -- (StackOverflowError) null
[ERROR] null
[ERROR] java.lang.StackOverflowError
[ERROR] at java.util.WeakHashMap.hash(WeakHashMap.java:298)
[ERROR] at java.util.WeakHashMap.get(WeakHashMap.java:396)
[ERROR] at java.util.Collections$SynchronizedMap.get(Collections.java:2584)
[ERROR] at org.aspectj.weaver.World$TypeMap.get(World.java:1302)
[ERROR] at org.aspectj.weaver.World.resolve(World.java:296)
[ERROR] at org.aspectj.weaver.World.resolve(World.java:228)
[ERROR] at org.aspectj.weaver.UnresolvedType.resolve(UnresolvedType.java:615)
[ERROR] at org.aspectj.weaver.ResolvedType.getRawType(ResolvedType.java:2444)
[ERROR] at org.aspectj.weaver.ReferenceType.isAssignableFrom(ReferenceType.java:496)
[ERROR] at org.aspectj.weaver.ReferenceType.isAssignableFrom(ReferenceType.java:454)
[ERROR] at org.aspectj.weaver.TypeVariable.isASubtypeOf(TypeVariable.java:201)
[ERROR] at org.aspectj.weaver.TypeVariable.canBeBoundTo(TypeVariable.java:191)
[ERROR] at org.aspectj.weaver.ReferenceType.isAssignableFrom(ReferenceType.java:566)
[ERROR] at org.aspectj.weaver.ReferenceType.isAssignableFrom(ReferenceType.java:454)
[ERROR] at org.aspectj.weaver.ReferenceType.isAssignableFrom(ReferenceType.java:615)
[ERROR] at org.aspectj.weaver.ReferenceType.isAssignableFrom(ReferenceType.java:454)
[ERROR] at org.aspectj.weaver.TypeVariable.isASubtypeOf(TypeVariable.java:201)
[ERROR] at org.aspectj.weaver.TypeVariable.canBeBoundTo(TypeVariable.java:191)
[ERROR] at org.aspectj.weaver.ReferenceType.isAssignableFrom(ReferenceType.java:566)

最后6行重复几十次,直到堆栈跟踪结束。maven构建似乎进入了一个递归循环,直到发生堆栈溢出。

EN

回答 1

Stack Overflow用户

发布于 2018-03-16 03:02:05

你在某个地方有一个符号链接,可以创建一个目录循环;你有一个插件,可以遍历所有的类进行修改(这里可能是aspectj-maven-plugin )。该插件可能正在使用某种递归算法来遍历目录,因此由于目录循环(这使得它看起来像有无限数量的目录),它将达到堆栈溢出。

当您执行cp -r时,您不会保留符号链接,这就是它修复它的原因,但cp -acp -rp都会保留这些链接,因此您将继续失败。

您应该在您的项目中搜索符号链接,找到相关链接并将其删除。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49305951

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档