使用Maven打包時包含資源文件和源碼到jar的方法

Maven打包時包含資源文件和源碼到jar

在使用Maven打包時,我們發現最終打包之後jar中隻有已經編譯完成的代碼class,資源文件都沒瞭,如果有資源文件需要打包進jar的話,直接打包jar無法正常工作。

其實,在pom.xml中配置一下<build>節點即可實現把資源打包進來的操作。

在<build>中添加以下內容

<resources>
    <resource>
        <directory>${basedir}/src/main/resources</directory>
        <includes>
            <include>**/*.*</include>
        </includes>
        <filtering>false</filtering>
    </resource>
 
    <resource>
        <directory>${basedir}/src/main/java</directory>
        <includes>
            <include>**/*.*</include>
        </includes>
        <excludes>
            <exclude>**/*.java</exclude>
        </excludes>
        <filtering>false</filtering>
    </resource>
</resources>

可以看到,添加的<resources>節點中有兩個<resource>子節點,分別配置瞭兩個不同的地方的內容打包進jar(一般資源文件放在項目resource文件夾和源代碼文件夾裡面),其中每一個<resource>節點中的內容

意義如下

  • <directory>為被打包的資源文件的路徑,${basedir}表示這個項目的根目錄。
  • <includes>被包含的文件,裡面的<include>**/*.*</include>表示包含其中的所有文件和文件夾。
  • <filtering>是否過濾資源文件,默認false。
  • <excludes>要排除的文件,上面的配置內容中排除瞭所有的java源代碼文件防止把源代碼也打包進去瞭。

如果在別的地方有資源文件,可以自己再添加<resource>節點,格式按照這個來。

需要說明的是一些jar外部包因為包含java doc註釋,所以也需要將源代碼文件包含進去。

這樣的話也很簡單,把上面的第二個<resource>節點中的整個<excludes>節點去掉即可。(即不配置排除java源代碼文件)

maven打包時包含源碼的問題

由於jar包和項目分開打包,並且jar包打包後不會帶註釋,會對代碼調試增加難度,所以增加瞭jar包攜帶源碼的方式,解決方式如下

1.maven-source-plugin提供項目自動將源碼打包並發佈的功能

在需要發佈源碼項目的pom.xml文件中添加如下代碼即可:

<!-- Source attach plugin -->
 <build>
      <plugins>
          <plugin>
              <groupId>org.apache.maven.plugins</groupId>
              <artifactId>maven-source-plugin</artifactId>
              <executions>
                  <execution>
                      <id>attach-sources</id>
                      <goals>
                          <goal>jar</goal>
                      </goals>
                  </execution>
              </executions>
          </plugin>
      </plugins>
  </build>

2.刪除target文件夾

3.mvan執行

  • 執行 mvn install,maven會自動將source install到repository 。
  • 執行 mvn deploy,maven會自動將source deploy到remote-repository 。
  • 執行 mvn source:jar,單獨打包源碼。

以上為個人經驗,希望能給大傢一個參考,也希望大傢多多支持WalkonNet。 

推薦閱讀: