maven項目打包額外lib目錄


maven項目依賴了幾個額外的jar包一直都無法打進最終jar,不知道哪里出了問題.一直對這塊不甚清楚,就大概梳理一下

默認打包方式:

  maven項目下,默認編譯目錄為

src/main/java和src/test/java 

  和

src/main/resouces和src/test/resources

所以按照默認條件,其他目錄的東西都不會被打進去,而且這些目錄底下的一些非符合條件文件也不會被打包,java目錄下只會打包.java文件,具體看target/classes目錄下的文件即可

除非特別指定,否則,打包時將會把target/classes目錄下的東西打包成jar

那么問題來了,怎么把想要加入打包的東西弄到目錄target/classes下呢

這個是由resource決定的,當需要將一些特殊文件打包時,需要額外配置resource標簽:

  比如經常碰到的在src/main/java中寫的xml需要打包到jar,需要配置:

    <build>
       <!-- 資源目錄 -->    
        <resources>    
            <resource>    
                <!-- 設定主資源目錄  -->    
                <directory>src/main/java</directory>    
 
                <!-- maven default生命周期,process-resources階段執行maven-resources-plugin插件的resources目標處理主資源目下的資源文件時,只處理如下配置中包含的資源類型 -->     
                 <includes>
                      <include>**/*.xml</include>
                 </includes>  
                     
                <!-- maven default生命周期,process-resources階段執行maven-resources-plugin插件的resources目標處理主資源目下的資源文件時,不處理如下配置中包含的資源類型(剔除下如下配置中包含的資源類型)-->      
                <excludes>  
                    <exclude>**/*.yaml</exclude>  
                </excludes>  
 
                <!-- maven default生命周期,process-resources階段執行maven-resources-plugin插件的resources目標處理主資源目下的資源文件時,指定處理后的資源文件輸出目錄,默認是${build.outputDirectory}指定的目錄-->      
                <!--<targetPath>${build.outputDirectory}</targetPath> -->      
   
                <!-- maven default生命周期,process-resources階段執行maven-resources-plugin插件的resources目標處理主資源目下的資源文件時,是否對主資源目錄開啟資源過濾 -->    
                <filtering>true</filtering>     
            </resource>              
        </resources>     
  </build>

  所以,如果要加入jar包同樣需要加入resource

<resource>
                <directory>lib</directory>
                <targetPath>BOOT-INF/lib/</targetPath>
                <includes>
                    <include>**/*.jar</include>
                </includes>
            </resource>

把lib目錄下的所有jar都加入到resource中,就能看到target/class目錄下有這些jar包啦

不過jar包有了,還是會報錯:

org.apache.maven.lifecycle.LifecycleExecutionException: Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.5.1:compile (default-compile) on project op-realname-test: Compilation failure
at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:212)
at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:153)
at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:145)
at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.java:116)
at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.java:80)
at org.apache.maven.lifecycle.internal.builder.singlethreaded.SingleThreadedBuilder.build(SingleThreadedBuilder.java:51)
at org.apache.maven.lifecycle.internal.LifecycleStarter.execute(LifecycleStarter.java:128)
at org.apache.maven.DefaultMaven.doExecute(DefaultMaven.java:307)
at org.apache.maven.DefaultMaven.doExecute(DefaultMaven.java:193)
at org.apache.maven.DefaultMaven.execute(DefaultMaven.java:106)
at org.apache.maven.cli.MavenCli.execute(MavenCli.java:863)
at org.apache.maven.cli.MavenCli.doMain(MavenCli.java:288)
at org.apache.maven.cli.MavenCli.main(MavenCli.java:199)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at org.codehaus.plexus.classworlds.launcher.Launcher.launchEnhanced(Launcher.java:289)
at org.codehaus.plexus.classworlds.launcher.Launcher.launch(Launcher.java:229)
at org.codehaus.plexus.classworlds.launcher.Launcher.mainWithExitCode(Launcher.java:415)
at org.codehaus.plexus.classworlds.launcher.Launcher.main(Launcher.java:356)
at org.codehaus.classworlds.Launcher.main(Launcher.java:47)
Caused by: org.apache.maven.plugin.compiler.CompilationFailureException: Compilation failure
at org.apache.maven.plugin.compiler.AbstractCompilerMojo.execute(AbstractCompilerMojo.java:972)
at org.apache.maven.plugin.compiler.CompilerMojo.execute(CompilerMojo.java:129)
at org.apache.maven.plugin.DefaultBuildPluginManager.executeMojo(DefaultBuildPluginManager.java:134)
at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:207)
... 21 more
[ERROR]
[ERROR] Re-run Maven using the -X switch to enable full debug logging.
[ERROR]
[ERROR] For more information about the errors and possible solutions, please read the following articles:
[ERROR] [Help 1] http://cwiki.apache.org/confluence/display/MAVEN/MojoFailureException

編譯失敗了,並且是因為缺少類引起的,而且是maven-compiler-plugin插件報錯,檢查發現,由於加入了新的資源,打包插件中也需要加入相應包路徑:

<plugin>
                <artifactId>maven-compiler-plugin</artifactId>
                <configuration>
                    <source>1.8</source>
                    <target>1.8</target>
                    <encoding>UTF-8</encoding>
                    <compilerArguments>
                        <!-- 打包本地jar包 -->
                        <extdirs>${project.basedir}/lib</extdirs>
                    </compilerArguments>
                </configuration>
            </plugin>

done


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM