Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/383.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 永无止境的Maven问题_Java_Spring_Maven - Fatal编程技术网

Java 永无止境的Maven问题

Java 永无止境的Maven问题,java,spring,maven,Java,Spring,Maven,我继承了一个写得很糟糕的Java/Spring项目。我使用EclipseST作为IDE。每次我试图安装另一台计算机进行开发时,我都会进入一个痛苦的世界。经过大量的修修补补和斗争,我已经将问题缩小到一个反复出现的问题——Maven的存储库 我在一台新电脑上用STS打开了这个项目。该项目不会构建,因为它声称某些SpringJAR丢失或无效。文件在那里(在.m2)目录中。删除它并更新Maven依赖项将下载文件的正确版本,错误将消失。只被替换为另一个错误,关于另一个jar文件 在多次重复该过程之后,我不

我继承了一个写得很糟糕的Java/Spring项目。我使用EclipseST作为IDE。每次我试图安装另一台计算机进行开发时,我都会进入一个痛苦的世界。经过大量的修修补补和斗争,我已经将问题缩小到一个反复出现的问题——Maven的存储库

我在一台新电脑上用STS打开了这个项目。该项目不会构建,因为它声称某些SpringJAR丢失或无效。文件在那里(在.m2)目录中。删除它并更新Maven依赖项将下载文件的正确版本,错误将消失。只被替换为另一个错误,关于另一个jar文件

在多次重复该过程之后,我不再出现无效jar文件错误。相反,我得到一个奇怪的错误,说
assembly
是无效的XML元素

我完全删除了.m2文件夹,让Maven重新填充它,错误并没有消失。直到我从另一台计算机(项目在那里编译和工作)复制了.m2文件夹后,问题才消失

Eclipse错误日志中没有与Maven相关的错误。我在问题窗格中只看到编译错误

为什么Maven不断下载损坏的JAR文件?我怎样才能每次都避免这个问题呢

澄清:我们没有使用代理,下载任何其他文件时也没有遇到任何网络问题。Python的
pip
、Node的
npm
、Microsoft的
nuget
甚至
bower
都能完美地工作,一天几次,有时在同样大的项目上工作。这是一个只有Maven的问题,而且有很多机器

其他信息: 我使用的是STS3.9.0.RELEASE(基于Eclipse4.6.3)。我使用的是STS embedded Maven,版本是3.3.9/1.7.0.20160603-1931(这是一个非常复杂的版本号,我不确定它到底意味着什么…)

我没有~/.m2/settings.xml文件(我删除了整个.m2目录)

以下是pom.xml中的repositories部分:

<repositories>

    <!-- For main Spring releases -->
    <repository>
        <id>org.springframework.maven.release</id>
        <name>Spring Maven Release Repository</name>
        <url>http://maven.springframework.org/release</url>
        <releases>
            <enabled>true</enabled>
        </releases>
        <snapshots>
            <enabled>false</enabled>
        </snapshots>
    </repository>

    <!-- For testing against latest Spring snapshots -->
    <repository>
        <id>org.springframework.maven.snapshot</id>
        <name>Spring Maven Snapshot Repository</name>
        <url>http://maven.springframework.org/snapshot</url>
        <releases>
            <enabled>false</enabled>
        </releases>
        <snapshots>
            <enabled>true</enabled>
        </snapshots>
    </repository>

    <!-- For developing against latest Spring milestones -->
    <repository>
        <id>org.springframework.maven.milestone</id>
        <name>Spring Maven Milestone Repository</name>
        <url>http://maven.springframework.org/milestone</url>
        <snapshots>
            <enabled>false</enabled>
        </snapshots>
    </repository>

    <repository>
        <id>jboss</id>
        <name>JBoss repository</name>
        <url>https://repository.jboss.org/nexus/content/repositories/releases</url>
    </repository>


    <repository>
        <id>Servlet-api</id>
        <name>Servlet-api repository</name>
        <!-- <url>http://repo1.maven.org/maven2/javax/servlet/javax.servlet-api/3.0.1/</url> -->
        <url>http://search.maven.org/</url>
    </repository>


</repositories>

org.springframework.maven.release
SpringMaven发布库
http://maven.springframework.org/release
真的
假的
org.springframework.maven.snapshot
SpringMaven快照存储库
http://maven.springframework.org/snapshot
假的
真的
org.springframework.maven.milestone
SpringMaven里程碑存储库
http://maven.springframework.org/milestone
假的
jboss
JBoss存储库
https://repository.jboss.org/nexus/content/repositories/releases
Servlet api
Servlet api存储库
http://search.maven.org/

也许您可以做的一件事是阻止maven下载快照,或者在pom文件中明确定义您确信可以使用的jar文件的版本。在存储库标记中,可以添加快照标记。也许发行版会更稳定

<repository>
  <snapshots>
    <enabled>false</enabled>
  </snapshots>
</repository>

假的

我已经安装了Maven 3.5.0,并告诉Eclipse使用它。目前看来,它似乎正在发挥作用。

不幸的是,这里有太多的变量在起作用。似乎有些本地maven设置或STS设置可能会起作用。您的机器上是否安装了独立的maven?从命令行运行构建是否有效?STS是否向maven添加了一些参数,可能是配置文件?运行
mvn-help:effective-pom
mvn-help:effective-settings
以准确了解您运行的内容;在STS中的help插件上执行这些目标也可以了解您使用的maven版本以及另一台计算机上的maven版本?可能有人在自己的存储库中安装了自定义JAR;这就是为什么复制他们的
.m2
文件夹会起作用。我确实和Maven一起经历过一些腐败的罐子,但没有你描述的那么严重。您是否也在使用一些会产生问题的自定义存储库?我建议删除你的
.m2
,让Maven重新填充它,并根据具体情况进行处理。因此:哪个jar会产生问题?它是一个公开的罐子,还是你自己的?它的md5是否与您在Maven Central中找到的md5匹配,等等(即,确定jar是否是原始的)我的想法转到了本地Maven repo,或者settings.xml中的其他内容。您是否将“vanilla”settings.xml与系统上正常工作的设置进行了比较?@diginoise,我使用的是STS附带的Maven,我没有自己安装它,而且shell中没有
mvn
。两台计算机使用相同的STS版本(3.9.0.0版本,基于Eclipse4.6.3)。我将尝试并调查哪些标志STS传递给Maven,以及安装了哪个版本的Maven。所有依赖项在pom.xml文件中都有特定的版本,我确信指定的版本可以工作。这不是版本控制问题或软件包冲突问题-一旦Maven正确下载了所有内容,系统就会正常工作。同样,如果在
cmd
prompt中执行此操作,系统也不会正常工作