Java的maven工程读取resources文件,并打可执行的jar
首先这是个maven工程,实现目标:
- 如何读取resources文件
- 如何打可执行的jar
如何读取resources文件
IDEA的maven工程没有resources文件,创建的方法见intelliJ idea新建maven项目没有resource文件夹。
项目的结构如图所示:
现在的目标就是读取resources下的json和pb文件:
- 首先读取json文件,这里的关键是使用
InputStream is = FreezePbLoader.class.getClass().getResourceAsStream(file_name);
获取InputStream
对象,然后再读取成字符串,最后转json。
// import java.io.*;
// import java.util.Map;
public static Map<String, Integer> load_vocab_resources(String file_name){
String jsonStr = "";
try{
InputStream is = FreezePbLoader.class.getClass().getResourceAsStream(file_name);
BufferedReader br = new BufferedReader(new InputStreamReader(is));
String s="";
String configContentStr = "";
while((s=br.readLine())!=null) {
configContentStr = configContentStr+s;
}
Map vocab = JSONObject.parseObject(configContentStr);
return vocab;
} catch (Exception e) {
System.out.println( "文件出现异常,读取失败!————");
e.printStackTrace();
return null;
}
}
// 用法
// Map vocab = load_vocab_resources("/word2idx.json");
- 同样读取模型的
pd
文件,关键是InputStream is = FreezePbLoader.class.getClass().getResourceAsStream("/frozen_model.pb");
,可以找到resources文件夹下的/frozen_model.pb
。注意要带斜杠,否则报错!
Graph graph = new Graph();
InputStream is = FreezePbLoader.class.getClass().getResourceAsStream("/frozen_model.pb");
byte[] graphBytes = IOUtils.toByteArray(is);
graph.importGraphDef(graphBytes);
Session session = new Session(graph);
maven如何打可执行的jar
会输出可执行和不可执行的jar包
pom.xml
里增加
<build>
<finalName>${project.artifactId}</finalName><!--修改编译出来的jar包名,仅为{artifactId}.jar-->
<plugins>
<plugin>
<artifactId>maven-assembly-plugin</artifactId>
<configuration>
<descriptorRefs>
<descriptorRef>jar-with-dependencies</descriptorRef>
</descriptorRefs>
<archive>
<manifest>
<mainClass>com.iflytek.tensorflow.FreezePbLoader</mainClass>
</manifest>
</archive>
</configuration>
<executions>
<execution>
<id>make-assembly</id>
<phase>package</phase>
<goals>
<goal>single</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
如下图所示: