Maven 編譯使用 rt.jar

weixin_34320159發表於2017-09-28

專案在使用mvn clean package 打包的時候出現 com.sun.image.codec.jpeg.JPEGCodec 是 Sun 的專用 API 這樣的編譯錯誤提示時,我們需要在maven編譯外掛中指定引數 rt.jar 檔案。因為 rt.jar 是jre 中自帶的 jar 包,所以才使用編譯引數的方式使用。

因為在windows下,這個分隔符應該是“分號”,而在Linux 下這個分隔符必須是“冒號”,無論我們寫死哪一種都是不相容的,所以maven為我們提供了這樣的變數 ${path.separator}

pom.xml 的程式碼片段如下:

<build>

<plugins>

    <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-compiler-plugin</artifactId>
        <version>2.5</version>
        <configuration>
            <source>${jdk.version}</source>
            <target>${jdk.version}</target>
            <encoding>UTF-8</encoding>
            <compilerArguments>
                <verbose />
                <bootclasspath>${JAVA_HOME}/jre/lib/rt.jar${path.separator}${JAVA_HOME}/jre/lib/jce.jar</bootclasspath>
            </compilerArguments>    
        </configuration>
    </plugin>

    <!-- 你專案中需要的其他外掛本例忽略 -->

</plugins>

</build>

主要我上面的 bootclasspath 引數指定了2個 jar 檔案。
第一是我專案中需要這2個檔案編譯。
第二我是為了說明另外一個問題:就是當我們需要指定多個 jar 的時候,中間的分隔符,要使用maven內建變數 ${path.separator} 來指定。因為在windows下,這個分隔符應該是“分號”,而在Linux 下這個分隔符必須是“冒號”,無論我們寫死哪一種都是不相容的,所以maven為我們提供了這樣的變數,可以自動根據作業系統來使用對應的分隔符。

所以maven分隔符變數 ${path.separator} 我們可能在其他配置的時候也會使用到,大家回想一下在Linux下和在Windows下配置環境變數時的分隔符就知道了。

相關文章