Maven 그 유용 한 Plugin 들.

배경
maven 은 자바 개발 자 에 게 필수 적 인 프로젝트 관리 와 구축 도구 로 서 세대 자바 에 깊 은 영향 을 주 었 습 니까?본 고 는 주로 당신 이 사용 한 적 이 있 지만 그다지 자주 사용 하지 않 는 것 을 기록 합 니 다.그러나 중요 한 순간 에 매우 유용 할 수 있 습 니 다plugin.필요 할 때 볼 수 있 습 니 다.플러그 인의 자주 사용 되 는 설정 만 열거 합 니 다.
컴 파일
maven-compiler-plugin
자바 프로젝트mvn compile를 편리 하 게 사용 하 는 것 은 바로 그것 을 사용 하 는 것 이다.더 말 하지 않 아 도 된다.
<plugin>
    <artifactId>maven-compiler-pluginartifactId>
    <version>3.8.0version>
    <configuration>
        <source>${java.version}source>
        <target>${java.version}target>
        <encoding>UTF-8encoding>
    configuration>
plugin>

maven-source-plugin
<plugin>
    <groupId>org.apache.maven.pluginsgroupId>
    <artifactId>maven-source-pluginartifactId>
    <version>3.0.1version>
    <executions>
        <execution>
            <id>attach-sourcesid>
            <phase>nonephase>
            <goals>
                <goal>jargoal>
            goals>
        execution>
    executions>
plugin>

Jar 패키지 와 이름 바 꾸 기 Package 실행 가능
maven-shade-plugin maven-shade-plugin주로 rename 가방 이름 을 제공 합 니 다.가방 에 의존 하 는 것 을 jar 에 넣 습 니 다.그야말로 만능 플러그 인 입 니 다.사용 합 니 다.실제 경험 에 따 르 면 이 플러그 인 은 다른 가방 과 충돌 하 는 sdk 를 제공 할 때 특히 유용 합 니 다.
  • filter:jar 가방 에 필요 한 가방 이름 이나 exclude 가 필요 하지 않 은 가방 이름 만 선택 하 십시오
  • artifactSet:어떤 jar 가방 을 최종 jar 가방 에 넣 을 지 선택 하 십시오
  • relocations:패키지 이름 경 로 를 바 꾸 거나 includes 와 excludes
  • 를 선택 할 수 있 습 니 다.
  • Transformers:합병 기의 선택 은 공공 자원 파일 을 어떻게 합병 해 야 하 는 지 입 니 다.
  • <plugin>
        <groupId>org.apache.maven.pluginsgroupId>
        <artifactId>maven-shade-pluginartifactId>
        <version>3.0.0version>
        <executions>
            <execution>
                <phase>packagephase>
                <goals>
                    <goal>shadegoal>
                goals>
                <configuration>
                    <shadedArtifactAttached>falseshadedArtifactAttached> <createDependencyReducedPom>truecreateDependencyReducedPom>
                    <createSourcesJar>truecreateSourcesJar>
                    <shadeSourcesContent>trueshadeSourcesContent>
                    <filters>
                        <filter>
                            <artifact>io.jaegertracing:jaeger-thriftartifact>
                            <includes>
                                <include>jaeger/org/apache/**include>
                                <include>io/jaegertracing/**include>
                            includes>
                        filter>
                        <filter>
                            <artifact>ch.qos.logback:logback-classicartifact>
                            <excludes>
                                <exclude>META-INF/services/**exclude>
                            excludes>
                        filter>
                    filters>
                    <artifactSet>
                        <excludes>
                            <exclude>net.bytebuddy:byte-buddy:jar:exclude>
                        excludes>
                    artifactSet>
                    <relocations>
                        <relocation>
                            <pattern>com.squareuppattern>
                            <shadedPattern>${shade.package}.com.squareupshadedPattern>
                        relocation>
                    relocations>
                    <transformers>
                        <transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
                            <manifestEntries>
                                <Premain-Class>${premain.class}Premain-Class>
                            manifestEntries>
                        transformer>
                    transformers>
                configuration>
            execution>
        executions>
    plugin>
    

    maven-jar-plugin
    <plugin>
        <groupId>org.apache.maven.pluginsgroupId>
        <artifactId>maven-jar-pluginartifactId>
        <version>3.1.0version>
        <configuration>
            <archive>
                <manifest>
                    <addClasspath>trueaddClasspath>
                    <mainClass>com.test.fastjar.fatjartest.FatJarTestApplicationmainClass>
                manifest>
            archive>
        configuration>
    plugin>
    

    maven-assembly-plugin
    이 플러그 인 은 주로 온라인 포장 과정 에서 사용 되 지만 실행 가능 한 jar 패 키 지 를 구축 하 는 데 도 사용 할 수 있 습 니 다.
    <plugin>
        <groupId>org.apache.maven.pluginsgroupId>
        <artifactId>maven-assembly-pluginartifactId>
        <version>3.1.0version>
        <configuration>
            <descriptorRefs>
                <descriptorRef>jar-with-dependenciesdescriptorRef>
            descriptorRefs>
            <archive>
                <manifest>
                    <mainClass>com.test.fastjar.fatjartest.FatJarTestApplicationmainClass>
                manifest>
            archive>
        configuration>
        <executions>
            <execution>
                <id>assemble-allid>
                <phase>packagephase>
                <goals>
                    <goal>singlegoal>
                goals>
            execution>
        executions>
    plugin>
    

    발표 하 다.
    maven-release-plugin
    규범화 프로젝트 의 구축 발표,POM 버 전 을 자동 으로 수정 하고 자동 으로 tag 를 치 는 것 이 특히 유용 합 니 다.
    상용 명령:
  • 발표 준비:mvn release:prepare
  • 실행 발표:mvn release:perform -Darguments="-Dmaven.deploy.skip=true"(jar 가방 을 창고 에 푸 시 하지 않 으 려 면)
  • <plugin>
        <groupId>org.apache.maven.pluginsgroupId>
        <artifactId>maven-release-pluginartifactId>
        <version>2.5.3version>
        <configuration>
            <tagNameFormat>@{project.version}tagNameFormat>
            <autoVersionSubmodules>trueautoVersionSubmodules>
        configuration>
    plugin>
    

    포장 하 다.
    주요 목적 은 필요 한 자원 을 모두 하나의tar또는zip가방 으로 압축 하여 온라인 발표 에 편리 하도록 하 는 것 이다.
    <plugin>
    	<groupId>org.apache.maven.pluginsgroupId>
    	<artifactId>maven-assembly-pluginartifactId>
    	<version>3.0.0version>
    	<configuration>
    		<appendAssemblyId>falseappendAssemblyId>
    		<filters>
                <filter>src/assembly/filter.propertiesfilter>
              filters>
    		<descriptors>
    			<descriptor>src/assembly/assembly.xmldescriptor>
    		descriptors>
    	configuration>
    	<executions>
    		<execution>
    			<id>make-assemblyid> 
    			<phase>packagephase> 
    			<goals>
    				<goal>singlegoal>
    			goals>
    		execution>
    	executions>
    plugin>
    

    중요 한 것 은src/assembly/assembly.xml어떻게 설정 하 느 냐 에 있 습 니 다.다음 과 같은 단독 jar 가방 을 온라인 으로 포장 하 는 것 입 니 다.
  • assembly 과정 에서 도 자원 파일 을 필터 할 수 있 습 니 다.
  • <assembly
            xmlns="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.2"
            xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
            xsi:schemaLocation="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.2 http://maven.apache.org/xsd/assembly-1.1.2.xsd">
        <id>binid>
        <formats>
            <format>tar.gzformat>
        formats>
        <includeBaseDirectory>falseincludeBaseDirectory>
        <fileSets>
            <fileSet>
                <directory>src/bin/${profileActive}directory>
                <outputDirectory>${project.artifactId}/binoutputDirectory>
                <fileMode>0755fileMode>
            fileSet>
        fileSets>
        <files>
            <file>
                <source>target/${project.artifactId}-${project.version}.jarsource>
                <outputDirectory>${project.artifactId}/outputDirectory>
            file>
        files>
    assembly>
    

    명령 실행
    maven-antrun-plugin
    ant 명령 실행
    <plugin>
        <groupId>org.apache.maven.pluginsgroupId>
        <artifactId>maven-antrun-pluginartifactId>
        <version>1.8version>
        <executions>
            <execution>
                <id>unpackid>
                <phase>packagephase>
                <configuration>
                    <target>
                        <echo message="unjar" />
                        <unzip src="${project.build.directory}/${artifactId}-${version}.jar" dest="${project.build.directory}/unpacked/" />
                    target>
                configuration>
                <goals>
                    <goal>rungoal>
                goals>
            execution>
            <execution>
                <id>copyid>
                <phase>packagephase>
                <goals>
                    <goal>rungoal>
                goals>
                <configuration>
                    <target>
                        <copy file="${project.build.directory}/${project.artifactId}-${project.version}.jar" tofile="../agent.jar" overwrite="true" />
                        <copy file="${project.build.directory}/classes/version" tofile="../version" overwrite="true" />
                    target>
                configuration>
            execution>
        executions>
    plugin>
    

    코드 생 성
    mybatis-generator-plugin
    <plugin>
    	<groupId>org.mybatis.generatorgroupId>
    	<artifactId>mybatis-generator-maven-pluginartifactId>
    	<version>1.3.7version>
    	<dependencies>
    		<dependency>
    			<groupId>mysqlgroupId>
    			<artifactId>mysql-connector-javaartifactId>
    			<version>5.1.41version>
    		dependency>
    		<dependency>
    			<groupId>com.itfswgroupId>
    			<artifactId>mybatis-generator-pluginartifactId>
    			<version>1.2.15version>
    		dependency>
    	dependencies>
    	<configuration>
    		<configurationFile>generatorConfig.xmlconfigurationFile>
    		<overwrite>trueoverwrite>
    		<verbose>trueverbose>
    	configuration>
    plugin>
    
    generatorConfig.xml
    xml version="1.0" encoding="UTF-8" ?>
    
    <generatorConfiguration>
       <context id="symphony">
    
           <property name="autoDelimitKeywords" value="true"/>
           <property name="beginningDelimiter" value="`"/>
           <property name="endingDelimiter" value="`"/>
    
           <plugin type="com.itfsw.mybatis.generator.plugins.SelectOneByExamplePlugin"/>
           <plugin type="com.itfsw.mybatis.generator.plugins.LimitPlugin"/>
           <plugin type="com.itfsw.mybatis.generator.plugins.ModelBuilderPlugin"/>
           <plugin type="com.itfsw.mybatis.generator.plugins.ExampleEnhancedPlugin"/>
           <plugin type="com.itfsw.mybatis.generator.plugins.BatchInsertPlugin"/>
           <plugin type="com.itfsw.mybatis.generator.plugins.ModelColumnPlugin"/>
           <plugin type="com.itfsw.mybatis.generator.plugins.SelectSelectivePlugin"/>
           <commentGenerator>
               <property name="suppressAllComments" value="false"/>
               <property name="suppressDate" value="true"/>
           commentGenerator>
           <jdbcConnection driverClass="com.mysql.jdbc.Driver" connectionURL="jdbc:mysql://192.168.8.1:5711/xxx?useSSL=false"
                           userId="xxx" password="xxx"/>
           <javaModelGenerator targetPackage="com.xxx.model"
                               targetProject="src/main/java"/>
           <sqlMapGenerator targetPackage="mapper" targetProject="src/main/resources" />
           <javaClientGenerator targetPackage="com.xxx.dao"
                                targetProject="src/main/java" type="XMLMAPPER"/>
           
           <table tableName="app_deploy">
               <generatedKey column="id" sqlStatement="JDBC" identity="true"/>
           table>
       context>
    generatorConfiguration>
    

    protobuf-maven-plugin
    .proto 파일 에 따라 protobuf 파일 을 만 드 는 데 사용 합 니 다.
     <extensions>
       <extension>
           <groupId>kr.motd.mavengroupId>
           <artifactId>os-maven-pluginartifactId>
           <version>1.5.0.Finalversion>
       extension>
     extensions>
     <plugin>
       <groupId>org.xolstice.maven.pluginsgroupId>
       <artifactId>protobuf-maven-pluginartifactId>
       <executions>
         <execution>
           <id>Generate Java from protocol buffersid>
           <phase>generate-sourcesphase>
           <goals>
             <goal>compilegoal>
             <goal>compile-customgoal>
           goals>
           <configuration>
             <checkStaleness>truecheckStaleness>
             <pluginArtifact>io.grpc:protoc-gen-grpc-java:1.18.0:exe:${os.detected.classifier}pluginArtifact>
             <pluginId>grpc-javapluginId>
             <protoSourceRoot>${project.build.directory}/generated-sources/_protoprotoSourceRoot>
             <protocArtifact>com.google.protobuf:protoc:3.6.1:exe:${os.detected.classifier}protocArtifact>
           configuration>
         execution>
       executions>
     plugin>
    

    SCM
    maven-scm-plugin
    원 격 창고 에서 원본 코드 를 가 져 와 프로젝트 에 사용 합 니 다.
    <plugin>
    <artifactId>maven-scm-pluginartifactId>
    <executions>
      <execution>
        <id>Checkout Helm Protocol Buffers source codeid>
        <phase>generate-sourcesphase>
        <goals>
          <goal>checkoutgoal>
        goals>
        <configuration>
          <checkoutDirectory>${project.build.directory}/generated-sources/helmcheckoutDirectory>
          <connectionUrl>scm:git:https://github.com/kubernetes/helm.gitconnectionUrl>
          <includes>_proto/hapi/**includes>
          <scmVersion>v2.12.3scmVersion>
          <scmVersionType>tagscmVersionType>
        configuration>
      execution>
    executions>
    plugin>
    

    총결산
    위 와 같이 본인 이 정리 한 유용 한 플러그 인 일 뿐 이 니 참고 하 시기 바 랍 니 다.

    좋은 웹페이지 즐겨찾기