精华内容
下载资源
问答
  • maven 中的插件不生效的排查方法

    千次阅读 2019-12-06 11:22:42
    感谢博的文章:https://www.cnblogs.com/wxyidea/p/10276672.html 先说结论: 原因出在在 <build> 下使用pluginManagement配置plugins和直接配置plugins是不同的。 形如: <build> <...

    还是自己学艺不精,没空系统学习,也是边用边学,这里记录下。

    感谢博主的文章:https://www.cnblogs.com/wxyidea/p/10276672.html

    先说结论:

    原因出在在

    <build>

    下使用pluginManagement配置plugins和直接配置plugins是不同的。

    形如:

    <build>
      <finalName>iot-kafkamsg</finalName>
      <pluginManagement>
        <plugins>
          <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-shade-plugin</artifactId>
            <version>2.4.1</version>
            <executions>
              <execution>
                <phase>package</phase>
                <goals>
                  <goal>shade</goal>
                </goals>
                <configuration>
                  <transformers>
                    <transformer
                      implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
                      <mainClass>cn.wxyidea.KafkaMsgDemo</mainClass>
                    </transformer>
                    <transformer
                      implementation="org.apache.maven.plugins.shade.resource.AppendingTransformer">
                      <resource>META-INF/spring.handlers</resource>
                    </transformer>
                    <transformer
                      implementation="org.apache.maven.plugins.shade.resource.AppendingTransformer">
                      <resource>META-INF/spring.schemas</resource>
                    </transformer>
                  </transformers>
                </configuration>
              </execution>
            </executions>
          </plugin>
        </plugins>
      </pluginManagement>
    </build>

     而直接使用plugins:

    <build>
            <finalName>Dr</finalName>

            <plugins>

                <!-- 可执行jar 插件 -->
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-jar-plugin</artifactId>
                    <version>2.6</version>
                    <configuration>
                        <archive>
                            <manifest>
                                <addClasspath>true</addClasspath>
                                <classpathPrefix>lib/</classpathPrefix>
                                <mainClass>com.fulong.drs.controller.PressureTest</mainClass>
                            </manifest>
                        </archive>
                    </configuration>
                </plugin>
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-dependency-plugin</artifactId>
                    <version>2.10</version>
                    <executions>
                        <execution>
                            <id>copy-dependencies</id>
                            <phase>package</phase>
                            <goals>
                                <goal>copy-dependencies</goal>
                            </goals>
                            <configuration>
                                <outputDirectory>${project.build.directory}/lib</outputDirectory>
                            </configuration>
                        </execution>
                    </executions>
                </plugin>

     

            </plugins>
        </build>

     区别是

    • pluginManagement是一种在项目的多个模块中共享相同插件配置的方法, 它旨在配置可以被其它模块继承的插件信息,即是对插件的声明,在pluginManagement中配置plugins,执行maven命令时,不会被maven加载。
      pluginManagement中声明的插件可以被当前pom或子pom中引用,比如你在项目的父pom中使用pluginManagement声明插件,那么在子pom中可以继承该插件,只需要在plugins节点中配置 groupId 和 artifactId就可以完成插件的引用。
    • plugins才是插件的实际调用,它可以自己定义plugin,也可以从父pom的pluginManagement中继承。

     ok了。

    顺便记录下自己排查插件没有生效的方法:就是看maven运行命令时的日志,如图所示:

     

    展开全文
  • 最近在搭建一个新项目时,使用spring-boot-maven-plugin插件打包,springboot项目在发布后启动时遇到找不到main问题。 遇到这个问题当时感觉本地直接idea里启动springboot好好的,为什么用自动化发布工具发布后...

    一:遇到的问题及解决方法

    最近在搭建一个新项目时,使用spring-boot-maven-plugin插件打包,springboot项目在发布后启动时遇到找不到主main问题。

    遇到这个问题当时感觉本地直接idea里启动springboot好好的,为什么用自动化发布工具发布后怎么就出现这个问题了呢?

    就到线上打好的包解压看MANIFEST.MF文件里的内容如下:

    Manifest-Version: 1.0
    Archiver-Version: Plexus Archiver
    Built-By: spy
    Created-By: Apache Maven 3.3.9
    Build-Jdk: 1.8.0_74

    只有一些简单的内容并没有启动类,主类什么的?所以报那个找不到主main就非常明确了。所以就怀疑是不是spring-boot-maven-plugin打包插件里些配置没有指定导致的?

    后来通过网上查询与看官网的文档还真是这个原因:

    我们这个的原因的是由于在spring-boot-maven-plugin插件里没有指定goal导致的:

    出现在问题时的配置是这个样的:

    <plugins>
        <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
            <version>2.1.4.RELEASE</version>      
            <configuration>
                <fork>true</fork>
            </configuration>
        </plugin>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <version>3.8.1</version>
            <configuration>
                <source>1.8</source>
                <target>1.8</target>
            </configuration>
        </plugin>
    </plugins>
    指定goal后解决问题对应的配置如下:

    <plugins>
        <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
            <version>2.1.4.RELEASE</version>
            <executions>
                <execution>
                    <goals>
                        <goal>repackage</goal>
                    </goals>
                </execution>
            </executions>
            <configuration>
                <fork>true</fork>
            </configuration>
        </plugin>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <version>3.8.1</version>
            <configuration>
                <source>1.8</source>
                <target>1.8</target>
            </configuration>
        </plugin>
    </plugins>
    修改goal后再去看MANIFEST.MF内容如下:
    Manifest-Version: 1.0
    Archiver-Version: Plexus Archiver
    Built-By: spy
    Start-Class: com.XX.Crm2cApplication
    Spring-Boot-Classes: BOOT-INF/classes/
    Spring-Boot-Lib: BOOT-INF/lib/
    Spring-Boot-Version: 2.1.4.RELEASE
    Created-By: Apache Maven 3.3.9
    Build-Jdk: 1.8.0_74
    Main-Class: org.springframework.boot.loader.JarLauncher

    内容多出了,Main-Class和Start-Class至此遇到的问题解决了。

    展开全文
  • maven插件安装

    2017-05-14 23:47:00
    eclipse安装maven插件,在网上有各种各样的方法,博使用过的也不止一种,但是留下的印象总是时好时不好,同样的方法也不确定那一次能够成功。其实失败的大多数原因是因为所安装的maven插件版本与eclipse的版本不...

     

         eclipse安装maven插件,在网上有各种各样的方法,博主使用过的也不止一种,但是留下的印象总是时好时不好,同样的方法也不确定那一次能够成功。其实失败的大多数原因是因为所安装的maven插件版本与eclipse的版本不一致造成,为了避免这种问题可以采用下面这种方式:

      1. 打开eclipse,菜单“Help”-“Install New Software...”

      2. 在Work with 地址栏输入:http://download.eclipse.org/releases/juno  注意:红字部分是eclipse对应的版本名称),稍等片刻:

        

     

      3. 在filter框中输入maven便能定位要安装的插件,如图:

         

     

      4. 选择“Collaboration”-“m2e - Maven Integration for Eclipse",并点击next按钮进行安装步骤。图:

         

     

      5.安装完成重启eclipse,菜单:Window --> preferences ,输入maven进行相关设置。

    转载:http://www.cnblogs.com/f-anything/p/5970151.html

    转载于:https://www.cnblogs.com/zjdxr-up/p/6854508.html

    展开全文
  • Idea开发maven插件

    千次阅读 2019-04-08 18:18:49
    文章目录场景描述插件功能插件开发第一步:创建插件项目第二步:插件实现2.1 声明mojo类(插件)2.2 添加参数2.3 execut方法实现自定义插件功能2.4插件使用 场景描述 最近博开发了一个用于接收数据的接口服务器,...

    场景描述

    最近博主开发了一个用于接收数据的接口服务器,一开始数据是外部购买的,数据源只有一个地方,但是随着业务的拓展,公司不打算全部数据都从外部购买,而是将其中一部分数据交给公司爬虫部门来爬取,这样数据源变成了两处。但是博主的接口服务器还有一个监控模块,主要是用来实时展示数据进来的详情,正是由于监控模块的存在,对应不同的数据源博主还得改源码来满足不同的需求,这样一来就很坑了,如果每次新增个数据源我都要做个自定义的那得多麻烦,于是乎博主在分析整个架构后,将代码做了重构,最后重构的情况就是生成一个常量类,每次争对不同的数据源,将常量类里面对应的常量注释掉即可。这下操作起来就方便多了,每次来个新的数据源,博主只需要新增常量并将其它的常量注释掉即可。由于前面都是开发阶段,博主想怎么整都可以,但是后面进入了流程化阶段了,项目需要交给配置管理组管理,打包发布什么的都是由配置管理组来负责,但是前面博主说了,对不同数据源博主需要注释常量类里面的一些字段来打包,但是项目交给配管组后,配管组是没权限该代码了,这就很尴尬了,博主的小聪明在这里就行不通了。于是乎,博主又开始耍小聪明了,能不能让配置组打包的时候加个参数什么的来实现对常量类的修改,博主找遍了整个互联网都没找到这样的插件(或者说操作简单,兼容性好的插件),所以博主打算自己开发一个maven插件。

    插件功能

    通过mvn指令传递参数来实现打包前修改项目源码。

    插件开发

    第一步:创建插件项目

    IDEA新建一个maven项目,注意选择maven-archetype-mojo这个模板
    在这里插入图片描述

    第二步:插件实现

    没错,就是这么简单,只要两步,因为你在选择好模板创建项目后,idea已经自动加入了一些依赖,并生成一个mojo类,该类继承自AbstractMojo。该类里面有一个execute方法,execute是程序的主入口。

    2.1 声明mojo类(插件)

    有两种方式声明一个类是mojo类,一种是通过文档注解的方式,如下所示:

    /**
    * @goal ChangeConstant
    */
    

    另外一种是通过添加@Mojo(name = “ChangeConstant”)注解的方式来声明,注解方式需要加依赖:

        <dependency>
          <groupId>org.apache.maven.plugin-tools</groupId>
          <artifactId>maven-plugin-annotations</artifactId>
          <version>3.4</version>
        </dependency>
    

    goal的作用后面会说明

    2.2 添加参数

    在使用maven插件的时候,有时需要传递一些参数,参数功能可以通过文档注释或者注解来声明。比如我要传递一个文件路径的参数,这里使用注解来声明:

    @Parameter( property = "ChangeConstant.filePath", defaultValue = "filePath default" )
     private String filePath;
    

    2.3 execut方法实现自定义插件功能

    这里博主希望在打包前对常量类做修改,常量类如下,如果是内部源,则将对外监控那四个常量注释掉,如果是对外监控,则将内部监控那四个常量注释掉。

        //对外监控
    //    public static final String logrecord = "logrecord";
    //    public static final String usrbyzqsjyb = "usrbyzqsjyb";
    //    public static final String usrbyzxsltj = "usrbyzxsltj";
    //    public static final String usrbyzxxq = "usrbyzxxq";
    
    
        //内部监控
        public static final String logrecord = "logrecord_inner";
        public static final String usrbyzqsjyb = "usrbyzqsjyb_inner";
        public static final String usrbyzxsltj = "usrbyzxsltj_inner";
        public static final String usrbyzxxq = "usrbyzxxq_inner";
    

    修改文件就不详叙了,大体思路就是读进来->修改->写入。下面是博主的插件类源码:

    package com.riclee;
    
    import org.apache.maven.plugin.AbstractMojo;
    import org.apache.maven.plugin.MojoExecutionException;
    import org.apache.maven.plugins.annotations.Mojo;
    import org.apache.maven.plugins.annotations.Parameter;
    import org.apache.maven.project.MavenProject;
    
    import java.io.*;
    
    /**
     * author: lichao
     * date: 2019/04/08
     */
    @Mojo(name = "ChangeConstant")
    public class ChangeConstantMojo extends AbstractMojo
    {
        @Parameter( property = "ChangeConstant.project", defaultValue = "${project}" )
        private MavenProject project;
    
    
        @Parameter( property = "ChangeConstant.filePath", defaultValue = "filePath default" )
        private String filePath;
    
    
        @Parameter( property = "ChangeConstant.type", defaultValue = "bydata" )
        private String type;
    
        public void execute()
            throws MojoExecutionException
        {
            filePath = project.getBasedir() + filePath;
            //根据操作系统类型,修改目录分隔符
            if(File.separator.equals("/")){
                filePath = filePath.replaceAll("\\\\","/");
            }else if(File.separator.equals("\\")){
                filePath = filePath.replaceAll("[/]","\\\\");
            }
            getLog().info("filePath = " + filePath);
            if(type.equals("bydata")){
                getLog().info("type = " + type + ", 对外接口服务" );
            }else if(type.equals("innerdata")){
                getLog().info("type = " + type + ", 内部采集接口服务" );
            }
            try{
                FileReader fr = new FileReader(filePath);
                BufferedReader bfr = new BufferedReader(fr);
                String line = null;
                StringBuffer newContent = new StringBuffer();
                while((line = bfr.readLine())!=null){
                    if(type.equals("bydata")){
                        if(line.contains("logrecord")){
                            lineChange(line,newContent);
                        }else if(line.contains("usrbyzqsjyb")){
                            lineChange(line,newContent);
                        }else if(line.contains("usrbyzxsltj")){
                            lineChange(line,newContent);
                        }else if(line.contains("usrbyzxxq")){
                            lineChange(line,newContent);
                        }else{
                            newContent.append(line + System.lineSeparator());
                        }
                    }
    
                    if(type.equals("innerdata")){
                        if(line.contains("logrecord")){
                            lineChange2(line,newContent);
                        }else if(line.contains("usrbyzqsjyb")){
                            lineChange2(line,newContent);
                        }else if(line.contains("usrbyzxsltj")){
                            lineChange2(line,newContent);
                        }else if(line.contains("usrbyzxxq")){
                            lineChange2(line,newContent);
                        }else{
                            newContent.append(line + System.lineSeparator());
                        }
                    }
                }
                fr.close();
                bfr.close();
    
                BufferedWriter bfw = new BufferedWriter(new FileWriter(filePath));
                bfw.write(newContent.toString());
                bfw.close();
            }catch (IOException e){
                e.printStackTrace();
            }
    
        }
    
        public void lineChange(String line,StringBuffer sb){
            if(line.contains("inner")){
                if(!line.contains("//")){
                    sb.append("//" + line + System.lineSeparator());
                }else{
                    sb.append(line + System.lineSeparator());
                }
            }else{
                sb.append(line.replaceAll("//","") + System.lineSeparator());
            }
        }
    
    
        public void lineChange2(String line,StringBuffer sb){
            if(line.contains("inner")){
                sb.append(line.replaceAll("//","") + System.lineSeparator());
            }else{
                if(!line.contains("//")){
                    sb.append("//" + line + System.lineSeparator());
                }else{
                    sb.append(line + System.lineSeparator());
                }
            }
        }
    }
    
    

    Pom依赖

    <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
      xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
      <modelVersion>4.0.0</modelVersion>
      <groupId>com.riclee</groupId>
      <artifactId>change-constant-maven-plugin</artifactId>
      <packaging>maven-plugin</packaging>
      <version>1.0.0</version>
      <build>
        <plugins>
          <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <configuration>
              <source>1.7</source>
              <target>1.7</target>
            </configuration>
          </plugin>
        </plugins>
      </build>
      <name>change-constant-maven-plugin Maven Mojo</name>
      <url>http://maven.apache.org</url>
      <dependencies>
        <dependency>
          <groupId>org.apache.maven</groupId>
          <artifactId>maven-plugin-api</artifactId>
          <version>2.0</version>
        </dependency>
        <dependency>
          <groupId>org.apache.maven.plugin-tools</groupId>
          <artifactId>maven-plugin-annotations</artifactId>
          <version>3.4</version>
        </dependency>
        <dependency>
          <groupId>org.apache.maven</groupId>
          <artifactId>maven-project</artifactId>
          <version>2.2.1</version>
        </dependency>
      </dependencies>
    </project>
    
    

    2.4插件使用

    插件开发好后install一下,提交到仓库中,根据你所配置的坐标地址,在项目中引用

    		<plugins>
    			<plugin>
    				<groupId>com.gildata</groupId>
    				<artifactId>change-constant-maven-plugin</artifactId>
    				<version>1.0.1</version>
    				<executions>
    					<execution>
    						<id>ChangeConstant</id>
    						<phase>pre-clean</phase>
    						<goals>
    							<goal>ChangeConstant</goal>
    						</goals>
    					</execution>
    				</executions>
    			</plugin>
    		</plugins>
    

    其中phase是指定你要在哪个生命周期使用插件,goal就是@mojo注解中的值。
    前面在开发插件的时候添加过一些参数,这些参数也可以在pom文件中指定默认值。

    		<properties>
    			<spring.profiles.active>dev</spring.profiles.active>
    			<ChangeConstant.filePath>\src\main\java\com\gildata\byinterserver\constant\Constant.java</ChangeConstant.filePath>
    			<ChangeConstant.type>bydata</ChangeConstant.type>
    		</properties>
    

    在打包的时候可以动态指定参数的值来覆盖默认值

    mvn -DChangeConstant.type=innerdata clean package
    

    以上只是博主的抛砖引玉,maven插件更详细的使用可以参考文档:
    https://maven.apache.org/guides/introduction/introduction-to-plugins.html

    展开全文
  • Eclipse安装maven插件

    2017-12-15 17:50:11
     eclipse安装maven插件,在网上有各种各样的方法,博使用过的也不止一种,但是留下的印象总是时好时不好,同样的方法也不确定那一次能够成功。其实失败的大多数原因是因为所安装的maven插件版本与eclipse的版本不...
  • eclipse安装maven插件,在网上有各种各样的方法,博使用过的也不止一种,但是留下的印象总是时好时不好,同样的方法也不确定那一次能够成功。其实失败的大多数原因是因为所安装的maven插件版本与eclipse的版本不...
  • eclipse安装maven插件

    2017-09-10 16:56:31
    ... eclipse安装maven插件,在网上有各种各样的方法,博使用过的也不止一种,但是留下的印象总是时好时不好,同样的方法也不确定那一次能够成功。其实失败的大多数原因是因为所安装的maven
  • 入口模块下pom增加maven打包插件。刷新重新打包。 其他 如果是用build artifacts 打包。 file-project structure 注意这里mainclass选择主类。 文件夹选择入口module的src下。 设置完后保存,build-
  • 使用命令行(cmd)构建,进入项目源文件目录(pom所在目录),指定构建插件版本(依赖坐标,版本等),使用命令构建: mvn install --settings D:\developtool\apache-maven-3.3.9\conf\settings_new_maven...
  • 1、参考该博:https://www.cnblogs.com/phpdragon/p/7216626.html(一方法解决不了看二方法) 2、一方法解决不了的原因可能是:(二方法解决不了看三方法) 联通网段不能访问maven的下载地址 换句话说就是因为网络...
  •  eclipse安装maven插件,在网上有各种各样的方法,博使用过的也不止一种,但是留下的印象总是时好时不好,同样的方法也不确定那一次能够成功。其实失败的大多数原因是因为所安装的maven插件版本与eclipse的版本不...
  • eclipse安装maven插件,在网上有各种各样的方法,博使用过的也不止一种,但是留下的印象总是时好时不好,同样的方法也不确定那一次能够成功。其实失败的大多数原因是因为所安装的maven插件版本与eclipse的版本不...
  • 目前大多公司的java项目都以Maven项目为,最近也通过Maven Helper解决了一些生产问题,在这里分享一下安装和基本使用方法!安装方法: File-Settings-Plugins点击“Browse repositories” 在弹出搜索框输入"maven ...
  • maven打包没有清单属性

    千次阅读 2019-05-09 11:37:54
    直接用maven打的包是无法用java -jar命令运行的 因为没办法找到入口类, 即main方法 那么需要加上maven插件配置 <?xml version="1.0" encoding="UTF-8"?> <project xmlns=...
  • 搜了好久,网上的方法都不管用 ——截止2020年10月26日 最终查看官方文档中的插件文档,官网首页spring.io,如图所示 发现需要添加如下依赖: <build> <plugins> <plugin> <groupId>...
  • 目前大多公司的java项目都以Maven项目为,最近也通过Maven Helper解决了一些生产问题,在这里分享一下安装和基本使用方法! 安装方法: File-Settings-Plugins 点击“Browse repositories” 在弹出搜索框输入...
  • 目前大多公司的java项目都以Maven项目为,最近也通过Maven Helper解决了一些生产问题,在这里分享一下安装和基本使用方法! 安装方法: File-Settings-Plugins 点击“Browse repositories” 在弹出搜索框输入&...
  • maven 打包java 程序没有清单属性

    千次阅读 2017-04-21 12:56:50
    问题: 使用maven将java 程序打成jar包,通过 java -jar jar-file ...解决方法:在maven pom文件中添加插件<!-- 使打包的jar文件包含了主函数的入口 --> <groupId>org.apache.maven.plugins <artifactId>maven-s
  • 简洁快速方法 找到项目,在项目目录,改动项目里面的 .classpath文件如下,然后刷新项目,就可以了:

空空如也

空空如也

1 2 3 4 5
收藏数 87
精华内容 34
关键字:

maven主方法插件