首頁 > 軟體

使用Maven打包時包含資原始檔和原始碼到jar的方法

2022-08-17 22:00:41

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,單獨打包原始碼。

以上為個人經驗,希望能給大家一個參考,也希望大家多多支援it145.com。 


IT145.com E-mail:sddin#qq.com