精华内容
下载资源
问答
  • maven项目打包获取依赖jar包

    千次阅读 2019-03-22 16:53:37
    转:... <!-- 第一种打包方式 (maven-jar-plugin), 将依赖和配置文件放到jar包外 --> <build> <sourceDirectory>src/main/java</sourceDirectory> &...
    转:https://www.cnblogs.com/strugglion/p/10020218.html
    
     <!-- 第一种打包方式 (maven-jar-plugin), 将依赖包和配置文件放到jar包外 -->
    <build>
        <sourceDirectory>src/main/java</sourceDirectory>
        <resources>
            <resource>
                <directory>src/main/resources</directory>
                <!-- 将<directory>目录下的文件打包到<targetPath>下 -->
                <targetPath>${project.build.directory}</targetPath>
                <excludes>
                    <exclude>**/*.java</exclude>
                </excludes>
            </resource>
        </resources>
        
        <testSourceDirectory>src/test/java</testSourceDirectory>
        <testResources>
            <testResource>
                <directory>src/test/resources</directory>
                <filtering>true</filtering>
                <excludes>
                    <exclude>**/*.java</exclude>
                </excludes>
            </testResource>
        </testResources>
        
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>2.3.2</version>
                <configuration>
                    <source>1.8</source>
                    <target>1.8</target>
                    <encoding>UTF-8</encoding>
                </configuration>
            </plugin>
            
            <!-- 将项目依赖包复制到<outputDirectory>指定的目录下 -->
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-dependency-plugin</artifactId>
                <executions>
                    <execution>
                        <id>copy-dependencies</id>
                        <phase>package</phase>
                        <goals>
                            <goal>copy-dependencies</goal>
                        </goals>
                        <configuration>
                            <outputDirectory>
                                ${project.build.directory}/lib
                            </outputDirectory>
                        </configuration>
                    </execution>
                </executions>
            </plugin>
            
            <!-- 将项目依赖包的路径(与上一项中的<outputDirectory>对应)添加到classPath中 -->
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-jar-plugin</artifactId>
                <configuration>
                    <archive>
                        <manifest>
                            <addClasspath>true</addClasspath>
                            <classpathPrefix>lib/</classpathPrefix>
                            <mainClass>com.ctbri.echoRisk.ApplicationStart</mainClass>
                        </manifest>
                        <manifestEntries>
                            <Class-Path>./</Class-Path>
                        </manifestEntries>
                    </archive>
                </configuration>
            </plugin>            
        </plugins>
    </build>

    复制代码

     

    复制代码

    <!-- 第二种打包方式 (maven-shade-plugin), 将依赖包和配置文件放到jar包内 -->
    <build>        
        <directory>${project.basedir}/target</directory>
        <finalName>${project.artifactId}-${project.version}</finalName>
    
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-surefire-plugin</artifactId>
                <version>2.21.0</version>
                <configuration>
                    <skipTests>true</skipTests>
                </configuration>
            </plugin>
            
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>2.3.2</version>
                <configuration>
                    <source>1.8</source>
                    <target>1.8</target>
                    <encoding>UTF-8</encoding>
                    <compilerArguments>
                        <extdirs>${project.basedir}/lib/</extdirs>
                    </compilerArguments>
                </configuration>
            </plugin>
            
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-shade-plugin</artifactId>
                <version>3.1.0</version>
                <executions>
                    <execution>
                        <phase>package</phase>
                        <goals>
                            <goal>shade</goal>
                        </goals>
                        <configuration>
                            <minimizeJar>true</minimizeJar>
                            <filters>
                                <filter>
                                    <artifact>*:*</artifact>
                                </filter>
                            </filters>
                            <transformers>
                                <!-- 往MANIFEST文件中写入Main-Class是可执行包的必要条件。ManifestResourceTransformer可以轻松实现。 -->
                                <transformer
                                    implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
                                    <mainClass>com.ctbri.echoRisk.ApplicationStart</mainClass>
                                </transformer>
                                <!-- AppendingTransformer 用来处理多个jar包中存在重名的配置文件的合并,尤其是spring -->
                                <transformer
                                    implementation="org.apache.maven.plugins.shade.resource.AppendingTransformer">
                                    <resource>META-INF/spring.handlers</resource>
                                </transformer>
                                <transformer
                                    implementation="org.apache.maven.plugins.shade.resource.AppendingTransformer">
                                    <resource>META-INF/spring.schemas</resource>
                                </transformer>
                            </transformers>
                        </configuration>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>

    复制代码

     

    复制代码

    <!-- 第三种打包方式 (maven-assembly-plugin) -->
    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-surefire-plugin</artifactId>
                <version>2.21.0</version>
                <configuration>
                    <skipTests>true</skipTests>
                </configuration>
            </plugin>
    
            <plugin>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>2.3.2</version>
                <configuration>
                    <source>1.8</source>
                    <target>1.8</target>
                    <encoding>UTF-8</encoding>
                    <compilerArguments>
                        <extdirs>${project.basedir}/lib/</extdirs>
                    </compilerArguments>
                </configuration>
            </plugin>
    
            <plugin>
                <artifactId>maven-assembly-plugin</artifactId>
                <configuration>
                    <descriptorRefs>
                        <descriptorRef>jar-with-dependencies</descriptorRef>
                    </descriptorRefs>
                    <archive>
                        <manifest>
                            <mainClass>com.ctbri.echoRisk.ApplicationStart</mainClass>
                        </manifest>
                    </archive>
                </configuration>
                <executions>
                    <execution>
                        <id>make-assembly</id>
                        <phase>package</phase>
                        <goals>
                            <goal>single</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>
    展开全文
  • 获取当前运行jar文件的目录

    千次阅读 2019-04-09 13:46:49
    于是写了一个java程序,将拿到的文件数据放到jar文件目录下,运行jar文件,在jar文件目录下生成需要的txt格式文件。 2,获取当前jar文件的目录 读取csv文件,这里有个小工具类 package com.pats.file.change; ...

    1.背景:公司需要对拿到的数据进行转换。拿到的为标准的csv格式的文件,公司需要txt格式的文件数据。于是写了一个java程序,将拿到的文件数据放到jar文件目录下,运行jar文件,在jar文件目录下生成需要的txt格式文件。

    2,获取当前jar文件的目录 读取csv文件,这里有个小工具类

    package com.pats.file.change;
    
    import java.io.File;
    
    public class JarToolUtil {
    	  /**
         * 获取jar绝对路径
         * 
         * @return
         */
        public static String getJarPath()
        {
            File file = getFile();
            if (file == null)
                return null;
            return file.getAbsolutePath();
        }
        
        /**
         * 获取jar目录
         * 
         * @return
         */
        public static String getJarDir()
        {
            File file = getFile();
            if (file == null)
                return null;
            return getFile().getParent();
        }
        
        /**
         * 获取jar包名
         * 
         * @return
         */
        public static String getJarName()
        {
            File file = getFile();
            if (file == null)
                return null;
            return getFile().getName();
        }
        
        /**
         * 获取当前Jar文件
         * 
         * @return
         */
        private static File getFile()
        {
            // 关键是这行...
            String path = JarToolUtil.class.getProtectionDomain().getCodeSource().getLocation().getFile();
            try
            {
                path = java.net.URLDecoder.decode(path, "UTF-8"); // 转换处理中文及空格
            }
            catch (java.io.UnsupportedEncodingException e)
            {
                return null;
            }
            return new File(path);
        }
    
         /**
         * 获取当前目录下的文件
         */
        public static List<String> getFile(String path) {
            File file = new File(path);
            
            File[] fileList = file.listFiles();
            List<String> list = new ArrayList<String>();
            for (int i = 0; i < fileList.length; i++) {
                if (fileList[i].isFile()) {
                    String fileName = fileList[i].getName();
                    list.add(fileName);
                }
                /*if (fileList[i].isDirectory()) {
                    String fileName = fileList[i].getName();
                    System.out.println("目录:" + fileName);        
                }*/
            }
            return list;
        }
    }
    

    3.下面时读csv 文件 写入txt文件的代码,共有两个方法 read() 和 write();

    package com.pats.file.change;
    
    import java.io.BufferedReader;
    import java.io.BufferedWriter;
    import java.io.File;
    import java.io.FileOutputStream;
    import java.io.FileReader;
    import java.io.IOException;
    import java.io.OutputStreamWriter;
    import java.util.List;
    
    public class Change {
    
    public static void read() {
      try {
    		String filePath = JarToolUtil.getJarDir();
    
    		List<String> pathList = JarToolUtil.getFile(filePath);
    		BufferedReader reader = null;
        for (String list : pathList) { // 遍历目录下的文件名 找到需要的csv文件
    	  if (list.endsWith("csv")) {
    
    	    reader = new BufferedReader(new FileReader(filePath + "\\" + list));
    		reader.readLine();// 第一行信息,为标题信息,不用,如果需要,注释掉
    		String line = null;
    		while ((line = reader.readLine()) != null) {
    
    		String[] item = line.split(",");// CSV格式文件为逗号分隔符文件,这里根据逗号切分
    		String writePath = filePath + "\\" + list.replace(".csv", ".txt"); // 为了写入相同的文件名
    		write(item, "USD/CNY", writePath);
    		    }
    
    	      }
    		}
    
    	} catch (Exception e) {
    		e.printStackTrace();
    	}
    }
    
    @SuppressWarnings("resource")
    public static void write(String[] str, String symbol, String writePath) throws IOException {
    
    	String text = null;
    	String timestamp = str[0] + "," + str[1];
    	File txt = new File(writePath);
    
    	if (!txt.exists()) {
    
    		txt.createNewFile();
    
    	}
    	BufferedWriter bw = null;
        bw = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(txt, true), "UTF-8"));
        // TODO Auto-generated catch block
        // TODO Auto-generated catch block
    	if (str.length == 22) {
    	for (int i = 2; i <= 6; i++) {
    	text = "{\"CONN_NAME\":\"TR_CONN1\",\"INSTRUMENT_CODE\":\"CNY=\",\"BIDPRICE\":" +"\""+ str[i + 15]+"\""
    	     + ",\"ASKPRICE\":" +"\""+ str[i + 10]+"\"" + ",\"BIDVOLUME\":" +"\""+ str[i + 5]+"\"" + ",\"ASKVOLUME\":" +"\""+ str[i]+"\""
    	     + ",\"IS_LINE_PRICE\":\"0\",\"IS_CROSS\":\"DIRECT\",\"CREATE_TIME\":" + timestamp
    	     + ",\"SIDE_ASK\":\"\",\"CODE_SET\":\"\",\"MODEL_ID\":\"\",\"SOURCE\":\"\",\"TRADESESSION\":\"\",\"PRICE_ID\":\"TR_CNY=_f2fc80dfc86d\",\"SIDE_BID\":\"\",\"RUNG\":\"\",\"TENOR\":\"\",\"TYPE\":\"\",\"FWD_SKEW_VALUE\":\"\",\"DATE_TIME\":\"2018-06-13 11:03:37,249\",\"IS_POLISH\":\"0\",\"BID_H\":\"\",\"SYMBOL_NAME\":\"\",\"VALUEDATE\":\"\",\"IS_REVERSE\":\"\",\"SKEW\":\"\",\"BID_N\":\"\",\"CHANNEL\":\"\",\"BID_V\":\"\",\"ISPANIC\":\"\",\"IS_USE\":\"\",\"IS_MANUAL\":\"\",\"BASIS_POINT\":\"\",\"TRADE_METHOD\":\"\",\"PRODUCT_ID\":\"\",\"VENUE\":\"TR\",\"OPERATOR\":\"\",\"BID_IS_VALID\":\"\",\"STATUS\":\"\",\"MARKET\":\"\",\"IS_VALID\":\"\",\"TEXT\":\"\",\"SPREAD\":\"\",\"MSGTYPE\":\"SINGLEFXPRICE\",\"VOLATILITY\":\"0\",\"ASKMOVE\":\"1\",\"BIG_NUM\":\"\",\"DAYS\":\"\",\"DEFAULT_LEVEL\":\"\",\"ASK_N\":\"\",\"SIDE\":\"BOTH\",\"BIDMOVE\":\"1\",\"ASK_H\":\"\",\"MODEL_NAME\":\"\",\"USER\":\"\",\"ASK_VOLATILITY\":\"0\",\"ASK_IS_VALID\":\"\",\"SYMBOL_ID\":\"\",\"SOURCE_NAME\":\"\",\"PRICE_TYPE\":\"SOURCE\",\"USER_NAME\":\"\",\"SETTLEMENTPRICE\":\"0\",\"ASK_V\":\"\",\"QUOTE_ID\":\"\",\"BASE_CURRENCY\":\"\",\"BID_VOLATILITY\":\"0\"}";
    
    		bw.write(text);
    		// TODO Auto-generated catch block
    		bw.newLine();
    			// TODO Auto-generated catch block
    		}
    		bw.close();
    
    	}
      }
     }
    

     

    展开全文
  • 多种情况下jar包获取文件的路径代码一、idea运行情况二、jar包运行情况三、总结 代码 代码中,分别使用 AppMain.class.getResource AppMain.class.getClassLoader().getResource new File System.getProperty 来...

    前言

    java中说到获取文件路径, 获取文件, 读取配置, 有好几种方式, 但是每种方式获取到的结果都不太一样, 适用的场景也不太一样,jar中执行和idea中直接跑又不一样。相信很多人也和我一样想搞清楚, 这里就直接摆上demo和结果来看看。

    项目的目录结构如下:
    在这里插入图片描述
    项目路径是D:\nowork\workspace\my-demo\demo-file (my-demo是主项目,demo-file是子模块)

    代码

    代码中,分别使用

    • AppMain.class.getResource
    • AppMain.class.getClassLoader().getResource
    • new File
    • System.getProperty
      来获取路径

    其中resources文件夹还有一个a.json文件,模拟我们需要读取的资源

    package com.zgd.demo.file.path;
    
    import java.io.File;
    import java.io.FileInputStream;
    import java.io.InputStream;
    import java.net.MalformedURLException;
    import java.net.URL;
    import java.nio.file.Files;
    import java.nio.file.Path;
    import java.util.Optional;
    
    /**
     * AppMain
     *
     * @author zgd
     * @date 2020/2/18 15:03
     */
    public class AppMain {
    
    
      public static void main(String[] args) throws MalformedURLException {
        System.out.println("---------getResource---------");
        //获取当前文件所在的路径
        URL u1 = AppMain.class.getResource("");
        //获取当前文件所在的路径
        URL u2 = AppMain.class.getResource("a.json");
        //获取项目根目录
        URL u3 = AppMain.class.getResource("/");
        URL u4 = AppMain.class.getResource("./a.json");
        URL u5 = AppMain.class.getResource("/a.json");
        System.out.println("AppMain.class.getResource(\"\").getPath() = " + (u1 == null ? "NullPointerException" : u1.getPath()));
        System.out.println("AppMain.class.getResource(\"a.json\").getPath() = "  + (u2 == null ? "NullPointerException" : u2.getPath()));
        System.out.println("AppMain.class.getResource(\"/\").getPath() = "  + (u3 == null ? "NullPointerException" : u3.getPath()));
        System.out.println("AppMain.class.getResource(\"./a.json\").getPath() = "  + (u4 == null ? "NullPointerException" : u4.getPath()));
        System.out.println("AppMain.class.getResource(\"/a.json\").getPath() = "  + (u5 == null ? "NullPointerException" : u5.getPath()));
    
    
        System.out.println("\n---------getClassLoader---------");
        String cl = Optional.ofNullable(AppMain.class.getClassLoader().getResource("")).orElse(new URL("file://NullPointerException")).getPath();
        String cl2 = Optional.ofNullable(AppMain.class.getClassLoader().getResource("a.json")).orElse(new URL("file://NullPointerException")).getPath();
        String cl3 = Optional.ofNullable(AppMain.class.getClassLoader().getResource("./a.json")).orElse(new URL("file://NullPointerException")).getPath();
        String cl4 = Optional.ofNullable(AppMain.class.getClassLoader().getResource("/")).orElse(new URL("file://NullPointerException")).getPath();
        System.out.println("AppMain.class.getClassLoader().getResource(\"\").getPath() = " + (cl == null ? "NullPointerException" : cl));
        System.out.println("AppMain.class.getClassLoader().getResource(\"a.json\").getPath() = " + (cl2 == null ? "NullPointerException" : cl2));
        System.out.println("AppMain.class.getClassLoader().getResource(\"./a.json\").getPath() = " + (cl3 == null ? "NullPointerException" : cl3));
        System.out.println("AppMain.class.getClassLoader().getResource(\"/\").getPath() = " + (cl4 == null ? "NullPointerException" : cl4));
    
    
        System.out.println("\n---------getPath---------");
        String f1 = new File("").getPath();
        String f2 = new File("a.json").getPath();
        String f3 = new File("./a.json").getPath();
        String f4 = new File("/").getPath();
        System.out.println("new File(\"\").getPath() = " + f1);
        System.out.println("new File(\"a.json\").getPath() = " + f2);
        System.out.println("new File(\"./a.json\").getPath() = " + f3);
        System.out.println("new File(\"/\").getPath() = " + f4);
    
    
        System.out.println("\n---------getAbsolutePath---------");
        //当前工程的绝对路径
        String absolutePath1 = new File("").getAbsolutePath();
        String absolutePath2 = new File("a.json").getAbsolutePath();
        String absolutePath3 = new File("./a.json").getAbsolutePath();
        String absolutePath4 = new File("/").getAbsolutePath();
        System.out.println("new File(\"\").getAbsolutePath() = " + absolutePath1);
        System.out.println("new File(\"a.json\").getAbsolutePath() = " + absolutePath2);
        System.out.println("new File(\"./a.json\").getAbsolutePath() = " + absolutePath3);
        System.out.println("new File(\"/\").getAbsolutePath() = " + absolutePath4);
    
        // 获取工程路径
        System.out.println("\n---------user.dir---------");
        String sp1 = System.getProperty("user.dir");
        System.out.println("System.getProperty(\"user.dir\") = " + sp1);
    
    
        System.out.println("\n---------getFile---------");
        try {
          FileInputStream fileInputStream = new FileInputStream(AppMain.class.getClassLoader().getResource("a.json").getPath());
          if (fileInputStream != null){
            System.out.println("AppMain.class.getClassLoader().getResource(\"a.json\")获取文件成功");
          }else{
            System.out.println("AppMain.class.getClassLoader().getResource(\"a.json\")未获取到文件");
          }
        } catch (Exception e) {
          System.out.println("AppMain.class.getClassLoader().getResource(\"a.json\")获取文件失败 = " + e);
        }
    
        try {
          InputStream fileInputStream = AppMain.class.getClassLoader().getResourceAsStream("a.json");
          if (fileInputStream != null){
            System.out.println("AppMain.class.getClassLoader().getResourceAsStream(\"a.json\")获取文件成功");
          }else{
            System.out.println("AppMain.class.getClassLoader().getResourceAsStream(\"a.json\")未获取到文件");
          }
        } catch (Exception e) {
          System.out.println("AppMain.class.getClassLoader().getResourceAsStream(\"a.json\")获取文件失败 = " + e);
        }
      }
      
    }
    
    
    
    

    一、idea运行情况

    "C:\Program Files\Java\jdk1.8.0_181\bin\java.exe" -Dvisualvm.id=75322443593900 -javaagent:C:\Users\Administrator\AppData\Local\JetBrains\Toolbox\apps\IDEA-U\ch-0\203.6682.168\lib\idea_rt.jar=64403:C:\Users\Administrator\AppData\Local\JetBrains\Toolbox\apps\IDEA-U\ch-0\203.6682.168\bin -Dfile.encoding=UTF-8 -classpath "C:\Program Files\Java\jdk1.8.0_181\jre\lib\charsets.jar;C:\Program Files\Java\jdk1.8.0_181\jre\lib\deploy.jar;C:\Program Files\Java\jdk1.8.0_181\jre\lib\ext\access-bridge-64.jar;C:\Program Files\Java\jdk1.8.0_181\jre\lib\ext\cldrdata.jar;C:\Program Files\Java\jdk1.8.0_181\jre\lib\ext\dnsns.jar;C:\Program Files\Java\jdk1.8.0_181\jre\lib\ext\jaccess.jar;C:\Program Files\Java\jdk1.8.0_181\jre\lib\ext\jfxrt.jar;C:\Program Files\Java\jdk1.8.0_181\jre\lib\ext\localedata.jar;C:\Program Files\Java\jdk1.8.0_181\jre\lib\ext\nashorn.jar;C:\Program Files\Java\jdk1.8.0_181\jre\lib\ext\sunec.jar;C:\Program Files\Java\jdk1.8.0_181\jre\lib\ext\sunjce_provider.jar;C:\Program Files\Java\jdk1.8.0_181\jre\lib\ext\sunmscapi.jar;C:\Program Files\Java\jdk1.8.0_181\jre\lib\ext\sunpkcs11.jar;C:\Program Files\Java\jdk1.8.0_181\jre\lib\ext\zipfs.jar;C:\Program Files\Java\jdk1.8.0_181\jre\lib\javaws.jar;C:\Program Files\Java\jdk1.8.0_181\jre\lib\jce.jar;C:\Program Files\Java\jdk1.8.0_181\jre\lib\jfr.jar;C:\Program Files\Java\jdk1.8.0_181\jre\lib\jfxswt.jar;C:\Program Files\Java\jdk1.8.0_181\jre\lib\jsse.jar;C:\Program Files\Java\jdk1.8.0_181\jre\lib\management-agent.jar;C:\Program Files\Java\jdk1.8.0_181\jre\lib\plugin.jar;C:\Program Files\Java\jdk1.8.0_181\jre\lib\resources.jar;C:\Program Files\Java\jdk1.8.0_181\jre\lib\rt.jar;D:\nowork\workspace\my-demo\demo-file\target\classes;D:\repository\net\oschina\zcx7878\fastdfs-client-java\1.27.0.0\fastdfs-client-java-1.27.0.0.jar;D:\repository\com\zgd\base\util-common\1.0.0\util-common-1.0.0.jar;D:\repository\org\apache\httpcomponents\httpclient\4.5.10\httpclient-4.5.10.jar;D:\repository\org\apache\httpcomponents\httpcore\4.4.12\httpcore-4.4.12.jar;D:\repository\commons-logging\commons-logging\1.2\commons-logging-1.2.jar;D:\repository\com\squareup\okhttp3\okhttp\4.2.0\okhttp-4.2.0.jar;D:\repository\com\squareup\okio\okio\2.2.2\okio-2.2.2.jar;D:\repository\org\jetbrains\kotlin\kotlin-stdlib\1.3.50\kotlin-stdlib-1.3.50.jar;D:\repository\org\jetbrains\kotlin\kotlin-stdlib-common\1.3.50\kotlin-stdlib-common-1.3.50.jar;D:\repository\org\jetbrains\annotations\13.0\annotations-13.0.jar;D:\repository\com\google\zxing\core\3.4.0\core-3.4.0.jar;D:\repository\com\google\zxing\javase\3.4.0\javase-3.4.0.jar;D:\repository\com\beust\jcommander\1.72\jcommander-1.72.jar;D:\repository\com\github\jai-imageio\jai-imageio-core\1.4.0\jai-imageio-core-1.4.0.jar;D:\repository\org\springframework\spring-core\5.1.9.RELEASE\spring-core-5.1.9.RELEASE.jar;D:\repository\org\springframework\spring-jcl\5.1.9.RELEASE\spring-jcl-5.1.9.RELEASE.jar;D:\repository\io\jsonwebtoken\jjwt\0.9.1\jjwt-0.9.1.jar;D:\repository\com\fasterxml\jackson\core\jackson-databind\2.9.6\jackson-databind-2.9.6.jar;D:\repository\com\fasterxml\jackson\core\jackson-annotations\2.9.0\jackson-annotations-2.9.0.jar;D:\repository\com\fasterxml\jackson\core\jackson-core\2.9.6\jackson-core-2.9.6.jar;D:\repository\commons-codec\commons-codec\1.13\commons-codec-1.13.jar;D:\repository\redis\clients\jedis\3.1.0\jedis-3.1.0.jar;D:\repository\org\apache\commons\commons-pool2\2.6.2\commons-pool2-2.6.2.jar;D:\repository\com\google\code\gson\gson\2.8.6\gson-2.8.6.jar;D:\repository\org\jsoup\jsoup\1.12.1\jsoup-1.12.1.jar;D:\repository\org\testng\testng\7.0.0\testng-7.0.0.jar;D:\repository\cn\hutool\hutool-all\5.2.5\hutool-all-5.2.5.jar;D:\repository\com\google\guava\guava\28.1-jre\guava-28.1-jre.jar;D:\repository\com\google\guava\failureaccess\1.0.1\failureaccess-1.0.1.jar;D:\repository\com\google\guava\listenablefuture\9999.0-empty-to-avoid-conflict-with-guava\listenablefuture-9999.0-empty-to-avoid-conflict-with-guava.jar;D:\repository\com\google\code\findbugs\jsr305\3.0.2\jsr305-3.0.2.jar;D:\repository\org\checkerframework\checker-qual\2.8.1\checker-qual-2.8.1.jar;D:\repository\com\google\errorprone\error_prone_annotations\2.3.2\error_prone_annotations-2.3.2.jar;D:\repository\com\google\j2objc\j2objc-annotations\1.3\j2objc-annotations-1.3.jar;D:\repository\org\codehaus\mojo\animal-sniffer-annotations\1.18\animal-sniffer-annotations-1.18.jar;D:\repository\com\zgd\base\log-common\1.0.0\log-common-1.0.0.jar;D:\repository\org\projectlombok\lombok\1.18.16\lombok-1.18.16.jar;D:\repository\org\slf4j\slf4j-api\1.7.25\slf4j-api-1.7.25.jar;D:\repository\junit\junit\4.12\junit-4.12.jar;D:\repository\org\hamcrest\hamcrest-core\1.3\hamcrest-core-1.3.jar;D:\repository\com\alibaba\fastjson\1.2.57\fastjson-1.2.57.jar;D:\repository\net\sf\trove4j\core\3.1.0\core-3.1.0.jar;D:\repository\org\apache\commons\commons-lang3\3.8.1\commons-lang3-3.8.1.jar;D:\repository\org\apache\commons\commons-collections4\4.1\commons-collections4-4.1.jar" com.zgd.demo.file.path.AppMain
    ---------getResource---------
    AppMain.class.getResource("").getPath() = /D:/nowork/workspace/my-demo/demo-file/target/classes/com/zgd/demo/file/path/
    AppMain.class.getResource("a.json").getPath() = NullPointerException
    AppMain.class.getResource("/").getPath() = /D:/nowork/workspace/my-demo/demo-file/target/classes/
    AppMain.class.getResource("./a.json").getPath() = NullPointerException
    AppMain.class.getResource("/a.json").getPath() = /D:/nowork/workspace/my-demo/demo-file/target/classes/a.json
    
    ---------getClassLoader---------
    AppMain.class.getClassLoader().getResource("").getPath() = /D:/nowork/workspace/my-demo/demo-file/target/classes/
    AppMain.class.getClassLoader().getResource("a.json").getPath() = /D:/nowork/workspace/my-demo/demo-file/target/classes/a.json
    AppMain.class.getClassLoader().getResource("./a.json").getPath() = /D:/nowork/workspace/my-demo/demo-file/target/classes/a.json
    AppMain.class.getClassLoader().getResource("/").getPath() = 
    
    ---------getPath---------
    new File("").getPath() = 
    new File("a.json").getPath() = a.json
    new File("./a.json").getPath() = .\a.json
    new File("/").getPath() = \
    
    ---------getAbsolutePath---------
    new File("").getAbsolutePath() = D:\nowork\workspace\my-demo
    new File("a.json").getAbsolutePath() = D:\nowork\workspace\my-demo\a.json
    new File("./a.json").getAbsolutePath() = D:\nowork\workspace\my-demo\.\a.json
    new File("/").getAbsolutePath() = D:\
    
    ---------user.dir---------
    System.getProperty("user.dir") = D:\nowork\workspace\my-demo
    
    ---------getFile---------
    AppMain.class.getClassLoader().getResource("a.json")获取文件成功
    AppMain.class.getClassLoader().getResourceAsStream("a.json")获取文件成功
    

    可以看出,

    • AppMain.class.getResource 当前class文件的target位置
    • AppMain.class.getClassLoader().getResource 项目target位置
    • new File 项目位置
    • System.getProperty 项目位置

    二、jar包运行情况

    打成jar包
    直接在targe目录下执行jar, jar包名demo-file-1.0-SNAPSHOT.jar
    在这里插入图片描述

    结果:

    ---------getResource---------
    AppMain.class.getResource("").getPath() = file:/D:/nowork/workspace/my-demo/demo-file/target/demo-file-1.0-SNAPSHOT.jar!/com/zgd/demo/file/path/
    AppMain.class.getResource("a.json").getPath() = NullPointerException
    AppMain.class.getResource("/").getPath() = NullPointerException
    AppMain.class.getResource("./a.json").getPath() = NullPointerException
    AppMain.class.getResource("/a.json").getPath() = file:/D:/nowork/workspace/my-demo/demo-file/target/demo-file-1.0-SNAPSHOT.jar!/a.json
    
    ---------getClassLoader---------
    AppMain.class.getClassLoader().getResource("").getPath() = 
    AppMain.class.getClassLoader().getResource("a.json").getPath() = file:/D:/nowork/workspace/my-demo/demo-file/target/demo-file-1.0-SNAPSHOT.jar!/a.json
    AppMain.class.getClassLoader().getResource("./a.json").getPath() = 
    AppMain.class.getClassLoader().getResource("/").getPath() = 
    
    ---------getPath---------
    new File("").getPath() = 
    new File("a.json").getPath() = a.json
    new File("./a.json").getPath() = .\a.json
    new File("/").getPath() = \
    
    ---------getAbsolutePath---------
    new File("").getAbsolutePath() = D:\nowork\workspace\my-demo\demo-file\target
    new File("a.json").getAbsolutePath() = D:\nowork\workspace\my-demo\demo-file\target\a.json
    new File("./a.json").getAbsolutePath() = D:\nowork\workspace\my-demo\demo-file\target\.\a.json
    new File("/").getAbsolutePath() = D:\
    
    ---------user.dir---------
    System.getProperty("user.dir") = D:\nowork\workspace\my-demo\demo-file\target
    
    ---------getFile---------
    AppMain.class.getClassLoader().getResource("a.json")获取文件失败 = java.io.FileNotFoundException: file:\D:\nowork\workspace\my-demo\demo-file\target\demo-file-1.0-SNAPSHOT.jar!\a.json (文件名、目录名或卷标语法不正确。)
    AppMain.class.getClassLoader().getResourceAsStream("a.json")获取文件成功
    
    

    三、总结

    • AppMain.class.getResource 当前class文件的target位置

    • AppMain.class.getClassLoader().getResource 项目target位置

    • new File 项目位置

    • System.getProperty 项目位置

    • 重点,jar中如果想要读取classes下的文件,只能使用getResourceAsStream按流的方式读取。不能使用getResource

    • 可以看出,如果你是要获取resources文件夹下的文件,使用第二种方式
      如果要获取某个文件,在项目根目录和src平齐的,可以使用三四方式

    展开全文
  • 获取gradle项目的所有依赖jar包 在项目的build.gradle文件中,添加以下插件 plugins { id 'java' } 以及下面的任务 task copyJars(type: Copy) { from configurations.runtime into 'lib' // 目标位置 } 运行...

    获取gradle项目的所有依赖jar包

    在项目的build.gradle文件中添加以下任务:

    下面的任务可以把所有compile类型的依赖包复制到目标文件夹下:

    task copyJars(type: Copy) {
        from configurations.runtime
        into 'lib' // 目标位置
    }
    

    以下任务可以复制所有依赖包到目标文件夹下,包括implementationapi类型的依赖:

    task copyJars(type: Copy) {
        from configurations.runtimeClasspath
        into 'lib' // 目标位置
    }
    

    参考文章1
    参考文章2

    展开全文
  • Eclipse创建Maven项目无法获取pom文件指定的jar包使用Maven创建项目经常无法获取jar包,总结原因应该是镜像源的问题,之前一直使用开源中国的镜像源,但有时候还是会遇到同样的问题。
  • EXE4J打成jar包后无法读取到jar包内的properties文件 发现在eclipse里一切正常,但打成jar包后就无法读取到properties文件了。 之前的程序是这样获取配置文件的: Thread.currentThread().getContextClassLoader()....
  • 获取POM.XML依赖的JAR包

    2018-07-31 17:55:00
    pom.xml 文件的依赖在本地仓库中,有些情况我需要根据pom.xml 抓取所有依赖的JAR包。 这个可以通过 ant 完成这个的抓取。 <target name="maven-jar" description="management jar files use maven2"> ...
  • 使用Maven构建Dubbo服务可执行jar包
  • 【本文版权归微信公众号"代码艺术"(ID:onblog)所有,若是转载请务必保留本段原创声明,违者必究。若是文章有不足之处,欢迎关注微信公众号私信与我进行交流!】 使用时去掉换行 各参数百度获取 java -jar -Xms...
  • window系统下部署测试后需要迁移到Linux系统下生产环境运行,由于生产环境设定JAVA_HOME的JDK版本还是1.6,需要指定1.8版本JDK运行Jar包,本文以指定JDK版本创建启停Jar服务的脚本。 创建应用启停空文件脚本并授权...
  • 1.1jar包同级目录下的config文件夹里的配置文件 其实我以前就见过这种方式了,只是不知道怎么做的,这样便于修改服务器上的配置文件。 可以使用maven-source-plugin插件,然后运行命令mvn clean package将配置...
  • Eclipse导出jar包含有第三方的jar包

    千次阅读 2011-12-25 19:13:13
    一般的jar包导出用export,选择资源,可运行的选择下main类,就可以了。但是要含有第三方的jar包就不行了。 eclipse的专门打jar包的一个插件fat jar,安装插件后,多了个菜单build fat jar选项,期间要勾选第三方的...
  • java代码在windowns上通过ssh远程执行linux命令 提交Mapreduce jar包 并获得 application_id
  • Spring boot生成的jar执行方式有多种。这里以最常用的为例。 在有java的环境中使用如下命令可以直接运行spring boot项目 java -jar app.jar 这种方式有个缺点,就是不能后台运行。 这时候就需要用到linux中有...
  • Spring Boot项目打成jar包部署时,一般会配合脚本来方便管理服务的启动与关闭,本文总结了在实践过程中用到的脚本,具体内容...# 后台运行jar包任务 nohup java -Xms1024m -Xmx1024m -XX:MetaspaceSize=128m -XX:M...
  • jar包完全解读

    千次阅读 多人点赞 2019-12-28 16:23:16
    本文抄自:jar包的一些事儿 前言: 作为java程序员,日常工作就是打jar包,可是对jar包的了解有多少呢? 一、什么是jar包 jar包就是 Java Archive File,顾名思义,它的应用是与 Java 息息相关的,是 Java 的一...
  • struts2各个jar包

    千次阅读 2019-01-03 10:16:41
    struts2五大核心jar包 &amp;lt;从下载的struts2框架中找出下面的jar包,可以从例子中找&amp;gt; Commons-logging.jar ————– 用于通用日志处理 (也可以用log4j代替) Freemarker.jar ————– ...
  • springboot 打jar包,无法引用jar包里面的类,还有jar包中XML文件无法生效问题解决 模块A调用模块B的类的启动类 @SpringBootApplication() public class DemoApplication { public static void main(String[] args)...
  • //最终的 Jar 名,如果没设置,默认为 [baseName]-[appendix]-[version]-[classifier].[extension] archiveName = "test.jar" //需打包的资源所在的路径集 // /* windows 绝对路径*/ def srcClassDir = "D:\...
  • 如何查看jar包的版本号?

    万次阅读 2018-01-18 09:37:15
    jar包根目录里的META-INF目录下的MANIFEST.MF文件里一般有会记录版本信息,可以到这个文件里查看 打开Java的JAR文件我们经常可以看到文件中包含着一个META-INF目录,这个目录下会有一些文件,其中必有一个MANIFEST....
  • C++调用jar包

    千次阅读 2016-04-27 08:44:57
    2、 有了jar包后,在网上找了不少文章介绍如何调用,在调用过程中一个函数的参数不知如何获取,如截图中红线部分。 即方法在类中的内在描述。 我的做法是: A、 打开cmd B、 cd 到 java工程目录下 C、 输入指令 ...
  • Maven部署jar包到远程仓库

    千次阅读 2019-09-26 23:23:02
    部署jar包到远程仓库主要包括两个部分:远程仓库认证,部署jar包到远程仓库 远程仓库的认证 大部分远程仓库无需认证就可以访问,但有时候出于安全方面的考虑,我们需要提供认证信息才能访问一些远程仓库。例如,组织...
  • 这样第三方的jar包就包含在classpath中,运行的java -jar xxx.jar的时候,也就不会报NoClassFound错误了。 完整的MF内容如下: Manifest-Version: 1.0 Archiver-Version: Plexus Archiver Created-By: Apache ...
  • maven打包时候将依赖jar包打入

    千次阅读 2017-05-05 16:57:21
    http://blog.csdn.net/xpsharp/article/details/47156197Java的jar包太多了,有时候我们为了方便执行,希望把所有引用的jar包打包到一起。<plugins> <plugin> <artifactId>maven-assembly-plugin</artifactId> ...
  • linux启动jar包(查询进程ID并且kill)

    千次阅读 2018-10-25 12:32:01
    #!/bin/sh count=$(netstat -nl | grep -w 8099 | sed -r 's#.* (.*)/.*#\1#'| wc -l) ... nohup java -jar /aaa.jar --spring.config.location=/aaa/application.yml &gt;/aaa/nohup.out...
  • springboot jar包启动方式

    千次阅读 2019-05-24 22:06:51
    1. linux环境下启动jar包 启动命令: nohup java -jar xxx.jar > xxx.txt & nohup: 意思是不挂断...xxx.tex’ jar包运行时控制台日志重定向到文件xxx.tex中 ‘&’ 代表后台运行 停止命令: 查看...
  • Spark进阶之路-Spark提交Jar包执行

    千次阅读 热门讨论 2018-08-12 05:48:00
    Spark进阶之路-Spark提交Jar包执行  作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任。    在实际开发中,使用spark-submit提交jar包是很常见的方式,因为用spark-shell来开发项目是很苦难的...
  • maven 常用命令 mvn 发布可执行jar包

    万次阅读 2016-02-23 17:52:31
    mvn 发布可执行jar包 1.首先将maven搭建的工程打成jar   需要在将该工程所支持的类库打在一个包中(默认情况下,maven在做mvn pakage时,只是将项目编译打包到一个jar中,其他的类库则需要引用才行)。...
  • 但是当我用Eclipse将TestAuto这个类打包成.jar包之后,同时将.jar包放至WEB-INF/lib下之后,然后启动Tomcat,这时则无法自动执行.jar包中的auto方法。 求大神指点下什么原因怎么解?? 菜鸟求助,谢谢!

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 160,484
精华内容 64,193
关键字:

获取运行jar包的id