idea打jar包(包括依賴包)

今天試着將一個maven項目打成jar包供其他項目使用,雖然看起開,對於第一次弄得我還是費了不少功夫,在此記錄一下,方便日後查看也給和我一樣在此處刨坑的小夥伴們指點迷津。

先講一下此次打jar包的基本情況:

IDE:idea,maven,這裏和jdk版本無關就不做介紹了。

目的:一個maven項目(依賴了第三方jar包)在idea中使用maven打成jar包,然後放在其他項目中使用

首先呢要保證打包項目正常可用以及maven和第三方依賴包以及maven插件沒有報錯也就是紅色波浪線,有則在有網環境中下載依賴即可。

如果打包項目中有test又想跳過test打包則點擊上圖藍色閃電按鈕 即可

打包方式這裏有兩種:1、將第三方依賴包打成class類放置到jar包。2、將第三方依賴包打成jar包另外放置。

1、在pom.xml中加入如下代碼:下面代碼是<!-- 將依賴的jar包中的class文件打進生成的jar包-->

<plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-assembly-plugin</artifactId>
                <version>2.4</version>
                <configuration>
                    <appendAssemblyId>false</appendAssemblyId>
                    <finalName>searchIndex</finalName>
                    <descriptorRefs>
<!-- 將依賴的jar包中的class文件打進生成的jar包-->
                        <descriptorRef>jar-with-dependencies</descriptorRef>
                    </descriptorRefs>
                    <archive>
                        <manifest>
                            <addClasspath>true</addClasspath>
<!-- 有Main函數的類:爲了生成的jar包使用命令執行時的入口函數,可靈活增加活刪除-->
                            <mainClass>com.yourcompany.yourproject.MainClass</mainClass>
                        </manifest>
                    </archive>
                </configuration>
                <executions>
                    <execution>
                        <id>make-assembly</id>
                        <phase>package</phase>
                        <goals>
<!-- <goal>single</goal>-->
                            <goal>assembly</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>

2、將第三方依賴包打成jar包另外放置。

<!-- 打包jar文件時,配置manifest文件,加入lib包的jar依賴 -->  
            <plugin>  
                <groupId>org.apache.maven.plugins</groupId>  
                <artifactId>maven-jar-plugin</artifactId>  
                <configuration>  
                    <archive>  
                        <manifest>  
                            <addClasspath>true</addClasspath>  
                            <classpathPrefix>lib/</classpathPrefix>  
                            <mainClass>com.xxx.uploadFile</mainClass>  
                        </manifest>  
                    </archive>  
                </configuration>  
            </plugin>  
            <!-- 拷貝依賴的jar包到lib目錄 -->  
            <plugin>  
                <groupId>org.apache.maven.plugins</groupId>  
                <artifactId>maven-dependency-plugin</artifactId>  
                <executions>  
                    <execution>  
                        <id>copy</id>  
                        <phase>package</phase>  
                        <goals>  
                            <goal>copy-dependencies</goal>  
                        </goals>  
                        <configuration>  
                            <outputDirectory>  
                                ${project.build.directory}/lib  
                            </outputDirectory>  
                        </configuration>  
                    </execution>  
                </executions>  
            </plugin>  

如果想要部分第三方依賴包打進jar包,其餘不想打進去則可以在pom.xml中使用<scope>test</scope>,該標籤會在文章尾有介紹

在打包命令中使用到的有如下圖三個命令

依次點擊即可並保證控制檯輸出BUILD SUCCESS字樣。

本人在package時提示Failed to execute goal org.codehaus.mojo:findbugs-maven-plugin:3.0.5:check (analyze-compile) on project netconf-java: failed with 2 bugs and 0 errors 。在pom.xml中刪除對應的org.codehaus.mojo插件即可

最後就會在classes同級目錄下生成對應的jar包

至此,打包已完成,只需要在目標項目中引入該jar包即可,如下圖:

也可以:

 <dependency>
            <groupId>xxx</groupId>
            <artifactId>xxx</artifactId>
            <version>v0.1</version>
            <scope>system</scope>
            <systemPath>${project.basedir}/lib/xxx.jar</systemPath>
        </dependency>

如果在使用該jar包時報錯:Exception in thread "main" java.lang.NoClassDefFoundError,則應該是第三方依賴jar包沒有導入到jar包中,回頭檢測pom.xml文件中對應的依賴包是否是<scope>compile</scope>。

<scope>的值的含義:
compile,缺省值,適用於所有階段,會隨着項目一起發佈。 
provided,類似compile,期望JDK、容器或使用者會提供這個依賴。如servlet.jar。 
runtime,只在運行時使用,如JDBC驅動,適用運行和測試階段。 
test,只在測試時使用,用於編譯和運行測試代碼。不會隨項目發佈。 
system,類似provided,需要顯式提供包含依賴的jar,Maven不會在Repository中查找它。

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章