java打jar包的maven方式

bck1453925668發表於2020-09-28

在使用Maven管理專案時, 使用maven打成jar包執行, 預設情況下是不包含依賴jar包的

將jar包採用不解壓jar包的方式,打入進一個jar包內,以下主要是 pom檔案的配置:

但是這種方式還是不能像springboot那樣 用一個單獨的jar 包, 並執行

<build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-assembly-plugin</artifactId>
                <version>2.6</version>
                <configuration>
                    <descriptorRefs>
                        <descriptorRef>jar-with-dependencies</descriptorRef>
                    </descriptorRefs>
                    <descriptors>
                        <!--<descriptor>src/assembly/assembly-fat-jar.xml</descriptor>-->
                        <descriptor>src/assembly/assembly-conf.xml</descriptor>   <!-- 依賴的額外配置檔案 將依賴包打入單一的jar,並且依賴包不解壓, -->
                    </descriptors>

                    <archive>
                        <manifest>
                            <mainClass>com.example.demo</mainClass>
                            <addClasspath>true</addClasspath>
                            <classpathPrefix>./libs</classpathPrefix>
                        </manifest>
                        <manifestEntries>
                            <Class-Path>.</Class-Path>
                        </manifestEntries>
                    </archive>
                </configuration>
            </plugin>
        </plugins>
</build>
src/assembly/assembly-conf.xml
<assembly>
    <id>with-dependence</id><!-- 配置檔案的標識,同時生成的jar包名字會把這個文字包含進去 -->
    <formats>
        <format>jar</format><!-- 打包型別,此處為jar -->
    </formats>
    <includeBaseDirectory>false</includeBaseDirectory>
    <dependencySets>
        <dependencySet>
            <unpack>false</unpack>     <!-- 是否解壓 -->
            <outputDirectory>libs</outputDirectory>  <!-- 將依賴jar包放入libs資料夾,不寫預設是jar包根目錄 -->
            <useTransitiveFiltering>true</useTransitiveFiltering>
            <useStrictFiltering>true</useStrictFiltering>
            <fileMode>666</fileMode>
            <scope>runtime</scope>
        </dependencySet>
    </dependencySets>
    <fileSets>
        <fileSet>
            <directory>${project.build.outputDirectory}</directory>
            <outputDirectory>./</outputDirectory> <!-- 自己編寫的執行main.class檔案 放置的路徑資訊 應該放到根目錄下 -->
        </fileSet>
    </fileSets>

</assembly>

 

第二種方式

是將依賴的jar包放到 一個單獨的資料夾

<plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-jar-plugin</artifactId>

                <configuration>
                    <archive>
                        <manifest>
                            <mainClass>com.example.demo</mainClass>
                            <addClasspath>true</addClasspath>
                            <classpathPrefix>./libs</classpathPrefix>
                        </manifest>
                        <manifestEntries>
                            <Class-Path>.</Class-Path>
                        </manifestEntries>
                    </archive>
                </configuration>
            </plugin>
            <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}/libs</outputDirectory>   <!-- 放到target 下的libs 目錄 -->
                        </configuration>
                    </execution>
                </executions>
            </plugin>

 

 

 

 

 

 

相關文章