• Archive for required library: '*****org/javassist/javassist/3.21.0-GA/javassist-3.21.0-GA.jar' in project 'SpringBootTest' cannot be read or is not a valid ZIP file

    出现以上错误,表示下载的jar包不可多,多半原因是下载过程中中途网络中断或其它原因导致没有完整下载下来,解决办法就是删除掉这个jar,让重新下载

  • mvn在本地库存在且完整,但是pom中依然报出文件不存在  

             这种可能跟第一次下载或者从别的地方copy过来,引入_****.repositories文件不是本地通过下载的有关,将其删除掉即可。

  • Could not resolve dependencies for project

           mvn在依赖dependency中引入的另一个工程,如果是pom工程则需要声明<type>pom</type>,默认是寻找jar。同时mvn在dependency打包时,要将依赖的包先deploy到环境下,然后这边才可以从仓库中获取编译。

  • parent.relativePath 不存在问题

    默认mvn会在..pom.xml中查找父项目,如果找不到,会去本地仓库然后是远端仓库

              设置<relativepath />,指定从远端仓库获取。

              本地仓库如果使用命令的形式,则默认采用mvn的setting文件的本地仓库地址,而我在eclipse中指定的setting文件为Repository中的setting,导致绕了好大圈,不过只有问题才能让人进步。

  •   项目有大红色叹号,build path 发现有两个java的lib下的jar包在项目中却指向了alibaba。

     

    问题是alibaba的druid包引用了这两个,而在druid的pom文件中指向JAVA_HOME,如果指向错误就导致找不到文件。

            一种解决方案就是在引入druid中排除掉错误的这两个。项目一般都会引用jdk的lib。        

  
<exclusions>
    <exclusion>
      <groupId>com.alibaba</groupId>
      <artifactId>jconsole</artifactId>
    </exclusion>
    <exclusion>
      <groupId>com.alibaba</groupId>
      <artifactId>tools</artifactId>
    </exclusion>
</exclusions>

    另一种就是修改druid的pom文件,去掉jdk1.8中的..

 

  •  mvn 模块之间引用发生异常,但引用的那个项目没有报错

              mvn项目之间的引用实质也是一种jar包的引用,因此尽管上一个项目没有报错,但不代表能够编译通过,因此如果build中发现引用出错,要对前一个项目进行package编译,查找问题。

  • Overriding Dependency Versions with Spring Boot

     mvn的jar包如果已经在某个中存在这个jar包,如果我们再手动引入,就会有版本覆盖的警告。不过新版本要在<properties></properties>中定义才可有效。

  •   failed to read artifact descriptor for

        这种可能跟第一次下载或者从别的地方copy过来,引入_****.repositories文件不是本地通过下载的有关,将其删除掉即可。如果是module那种,将对应的一并删除即可。 

  • Plugin execution not covered by lifecycle configuration

               解决办法参照 https://blog.csdn.net/xyr05288/article/details/79569183

    原因是第三方的plugin中的phrase和mvn的公共的phrase都存在,从mvn生命周期lifecycle角度,导致程序不知道应该调用哪一个,因此报出以上错误。这种不影响程序运行。

    处理办法:第一种: 添加<pluginmanagement></pluginmanagement>将plugin作为公共管理。

    第二种:在错误处,点击进行ignore。

    

   第三种在lifecycle-mapping-metadata.xml文件中添加ignore:

 

<lifecycleMappingMetadata>
    <pluginExecutions>
    
        <pluginExecution>
            <pluginExecutionFilter>
                <groupId>org.codehaus.mojo</groupId>
                <artifactId>findbugs-maven-plugin</artifactId>
                <goals>
                    <goal>execute</goal>
                </goals>
                <versionRange>[3.0.1,)</versionRange>
            </pluginExecutionFilter>
            <action>
                <ignore />
            </action>
        </pluginExecution>
        <pluginExecution>
            <pluginExecutionFilter>
                <groupId>com.mycila</groupId>
                <artifactId>license-maven-plugin</artifactId>
                <goals>
                    <goal>execute</goal>
                </goals>
                <versionRange>[2.11,)</versionRange>
            </pluginExecutionFilter>
            <action>
                <ignore />
            </action>
        </pluginExecution>
        <pluginExecution>
            <pluginExecutionFilter>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-checkstyle-plugin</artifactId>
                <goals>
                    <goal>execute</goal>
                </goals>
                <versionRange>[2.17,)</versionRange>
            </pluginExecutionFilter>
            <action>
                <ignore />
            </action>
        </pluginExecution>
    </pluginExecutions>
</lifecycleMappingMetadata>

 6. Perhaps you are running on a JRE rather than a JDK

 mvn install 报出这个错,原因是eclispe默认采用jre,因此要在window->preference->java中修改为jdk即可。

 7. target\classes\META-INF\MANIFEST.MF (系统找不到指定的路径。)

 pom文件报错,重新mvn update program,或者 clean项目

8.Cannot change version of project facet Dynamic Web Module to 2.5. ****  line 1 Maven Java EE Configuration Problem

           是因为project facet的module从远端和本地不匹配导致。可进入然后将Dynamic 的对号去掉,然后Apply,然后在打上再apply。

          再update mvn project。

9. mvn编译插件可解决mvn自动构建为J2E1.5的问题,mvn默认对应的j2e1.5导致

 

复制代码
      <plugin>    
        <groupId>org.apache.maven.plugins</groupId>    
        <artifactId>maven-compiler-plugin</artifactId>    
        <configuration>    
            <source>1.8</source>    
            <target>1.8</target>    
        </configuration>    
     </plugin> 
复制代码

 10. 删除或者改变pom.xml中的内容,但是idea-dependency中的依赖包还是未发生变化,且reimport也不起作用。

       setting.xml文件有错导致,可通过  mvn clean 来确定setting文件。

 11. Element 'dependency' cannot have character [children], because the type's content type is element-on

  pom.xml中 存在着一些特殊字符,可能是从别的地方粘贴而带来的。删除标签间的空格,重新格式化。

 

12. mvn的pom中配置有repository但是hundson打包,或者本地下载jar包时,不加载新的repository地址问题。

因 setting文件中 <mirrorof>*</mirrorOf>导致,切换为<mirrorof>center</mirrorOf>。即可。

13.  501 HTTPS Required  mvn打包出现501的错误

    mvn对应的私服地址,不再支持http请求,需要去setting.xml中将错误信息中指出的私服地址变为https即可。

14. mvn的repository已经引入就是下载不下来包。

  是否右上角的 MVN下的 Toggle offline mode 模式被打开导致下载不下来。

 

15. 在resources下的某个yml中定义 @project.version@ ,但是运行编译出错,不识别@,尤其是带有父子项目那种。

需要在pom.xml中添加:

        <resources>
            <resource>
                <directory>src/main/resources</directory>
                <filtering>true</filtering>
            </resource>
        </resources>

build package   即可看到target中的内容

16. mvn 在windows环境打包运行,提示解析application.yml出错,编码问题,在linux下正常。尤其是使用resources后,

原因是文件中有中文的注释说明在windows下是gbk,linux默认是utf-8,编码识别出错导致。属性中指定编码格式即可。

<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>

17.  from/to maven-default-http-blocker (http://0.0.0.0/): Blocked mirror for repositories 

原因:mvn在3.8版本默认支持https的安全网站,因此私服搭建的http,会被认为是不安全的。在settings的mirror处可以注释掉采用阿里的镜像。

    <mirror>
      <id>aliyunmaven</id>
      <mirrorOf>central</mirrorOf>    
      <name>阿里云公共仓库</name>
      <url>https://maven.aliyun.com/repository/public</url>
    </mirror>

18.  MVN执行mvn test使用的字符集是GBK,而不是UTF-8,导致中文乱码测试失败,但是通过Idea的running却结果是好的。

原因: windows环境默认charset是GBK, 可通过  System.out.println("charset " + Charset.defaultCharset()); 查看到。

通过给maven-surefire-plugin增加UTF-8,可解决。

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-surefire-plugin</artifactId>
    <version>2.22.2</version>
    <configuration>
         <argLine>-Dfile.encoding=UTF-8</argLine>
     </configuration>
</plugin>

 

18.2  mvn 在使用高版本(3.9.6)版本时,发现mvn test 并没有执行test , maven-surefire-plugin高版本不执行test

原因mvn在高版本默认使用的surefire版本也自动使用3版本,参考文档:SpringBoot 单元测试不执行:maven-surefire-plugin 版本问题 - 瘦风 - 博客园 (cnblogs.com)

maven在2.22.1 和以上是个分水岭,因此需要给surefire指定对应的junit

        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-surefire-plugin</artifactId>
            <version>3.2.5</version>
            <configuration>
                <argLine>-Dfile.encoding=UTF-8</argLine>
            </configuration>
            <dependencies>
                <dependency>
                    <groupId>org.apache.maven.surefire</groupId>
                    <artifactId>surefire-junit47</artifactId>
                    <version>3.2.5</version>
                </dependency>
            </dependencies>
        </plugin>

 

 

 

 

 

 

19.  jacoco 无法生成jacoco.exec 文件

使用jacoco做单元测试覆盖率,无法输出jacoco.exec 的原因是maven-surefire-plugin(执行测试用例插件)也会输出报告。

处理方案:

实际原因是surefire中使用了argLine,用来处理 18 的问题,这个和jacoco产生冲突,需要将argLine放在上面的properties中即可。

  <properties>    
        <argLine>-Dfile.encoding=UTF-8</argLine>
  </properties>

  

      <plugin>
                <groupId>org.jacoco</groupId>
                <artifactId>jacoco-maven-plugin</artifactId>
                <version>0.8.6</version>
                <executions>
                    <execution>
                        <id>prepare-agent</id>
                        <goals>
                            <goal>prepare-agent</goal>
                        </goals>
                    </execution>
                    <execution>
                        <id>report</id>
                        <phase>test</phase>
                        <goals>
                            <goal>report</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
            <plugin>

Since Maven 3.8.1 http repositories are blocked

注释掉 maven-default-http-blocker即可

<mirrors>
  <!--<mirror>
    <id>maven-default-http-blocker</id>
    <mirrorOf>external:http:*</mirrorOf>
    <name>Pseudo repository to mirror external repositories initially using HTTP.</name>
    <url>http://0.0.0.0/</url>
    <blocked>true</blocked>
  </mirror>-->
</mirrors>

 

posted on 2017-11-15 13:48  zhaoqiang1980  阅读(400)  评论(0编辑  收藏  举报