專案處境:某客戶長期使用JDK 1.4開發,預計未來(不知要等多久)升級JDK 5.0,而JUnit 4.x版需要用到JDK 5.0的注釋。需求是如何使用Maven在測試時使用JDK 5.0,交付war檔或jar檔是使用JDK 1.4編譯。
經分析,開發時仍需使用JDK 5.0,才能引入JUnit 4.x,開發過程就避免使用JDK 5.0的語法。是故可以設定不同的Profile。在<Project>根節點加以下內容:
<profiles>
<profile>
<id>jdk14</id>
<activation>
<jdk>1.4.2</jdk>
</activation>
<build>
<plugins>
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>1.4</source> <!-- 編譯、打包均用JDK 1.4 -->
<target>1.4</target>
<skip>true</skip> <!-- 跳過test phase -->
</configuration>
</plugin>
</plugins>
</build>
</profile>
</profiles>
command是mvn clean install -Pjdk14。平常開發是用預設的JDK 5.0,命令是mvn clean install,所以src/test目錄下所有的測試碼要先能被編譯再來被測試無誤後,才能往下打包。而mvn clean install -Pjdk14則是改用JDK 1.4編譯,在<skip>true</skip>下src/test下所有測試碼不會被編譯,也就不會無法識別JDK 5.0特有的語法注釋。訊息大概如下:
[INFO] [compiler:testCompile {execution: default-testCompile}]
[INFO] Not compiling test sources
[INFO] [surefire:test {execution: default-test}]
[INFO] No tests to run.
[INFO] [jar:jar {execution: default-jar}]
[INFO] Building jar: D:\workspace\demo\target\app.jar
留言列表