先直接跳到終點前,寫完程式了,怎麼交付給使用者,總不能給一堆 class 檔吧,不能作成 exe 檔(使用 Launch4j 將 jar 包成 exe 檔),至少要作成可執行的 jar 檔。
產生「可執行的 jar 檔」
產生 jar 檔沒問題,尤其是用 Maven,下個 mvn package 就好了,但是不會自動執行啊,問題在於要從哪個 class 執行,也就是說哪個 class 有 main。
只要在 jar 檔裡建個 META-INF/MANIFST.MF 檔案,並填入以下內容就可以了。
Main-Class: idv.neil.executableJar.HelloEJ記得要斷行。
手動產生有點麻煩,Maven 幫我們想過了,只要在 pom.xml 裡加上以下的設定。
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-shade-plugin</artifactId>
<version>1.7.1</version>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>shade</goal>
</goals>
<configuration>
<transformers>
<transformer
implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
<mainClass>idv.neil.executableJar.HelloEJ</mainClass>
</transformer>
</transformers>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
再執行 mvn package,產生的 jar 檔裡就有 Main-Class 定義了。最後要怎麼執行「可執行的 jar 檔」?
最簡單就是使用 javaw,在安裝 JRE 之後會將 jar 關聯給 javaw,所以若沒有更改關聯檔案,只要雙點 jar 就可以了。
或者從 Command Line 執行:
java -jar TheJarFile.jar
又或者寫個 bat 檔,將以下內容貼到記事本存成 run.bat,雙點 run.bat 也可以執行。
java -jar {FULL_PATH}/TheJarFile.jar
如果用到其他 library 呢?
Maven 也想好了,只要下個 mvn package,會把 pom.xml 定義用到的 dependency 通通包到 jar 檔裡。
怎麼讀取外部檔案?
public class HelloEJ {
public static void main(String[] args) {
String string = StringUtils.leftPad("Hello world", 20, '.');
try {
// 與 jar 檔同位置
string = FileUtils.readFileToString(new File("a.txt"));
// jar 檔內第一層,也就是與 package idv 同位置
InputStream is = HelloEJ.class.getResourceAsStream("/a.txt");
string = IOUtils.toString(is);
IOUtils.closeQuietly(is);
}
catch (IOException e) {
e.printStackTrace();
string = e.getLocalizedMessage();
}
show(string);
}
private static void show(String string) {
Frame f = new Frame();
f.addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) {
System.exit(0);
}
});
f.add(new Label(string));
f.setSize(200, 200);
f.setVisible(true);
}
}
---
沒有留言:
張貼留言