WebApp中的Java Maven参考文件

时间:2016-10-12 06:10:41

标签: java maven

我正在尝试引用Java应用程序中的一些文件,这些文件将被复制到WAR中。

我是Maven的新手,但基本上文件是

    • 爪哇
        • Class ---- FROM HERE
    • web应用
      • 资源
        • 文件夹---- TO HERE

我尝试过相对路径,例如

    File source = new File("../../../webapp/resources/folder");

但永远不能从班级访问该文件夹。

有替代方法吗?

2 个答案:

答案 0 :(得分:3)

永远记住Maven的政策是convention over configuration 话虽如此,在您的情况下,在使用Maven时,您需要遵循Maven Standard Directory Structure 创建一个类似src/main/java的目录结构,并将您的包放在java文件夹中 对于任何资源,请创建类似src/main/resources的文件夹结构,并将您的资源放在resources文件夹中 执行此操作后,假设在src/main/resources目录中有一个名为readme.txt的文件,您可以使用以下方法轻松访问此文件:
 File file = new File("readme.txt");
Maven将始终将src/main/resources视为任何资源的根 另一个例子是假设您在src/main/resources/somefolder/hello.txt中有一个文件名hello.txt然后您可以使用以下方式访问它:
File file = new File("somefolder/readme.txt");

答案 1 :(得分:1)

我做了你想要的同样的事情。 同样我需要从war文件中的类替换最新生成的类。 这样在pom.xml文件中,您将获得生成类文件的路径。 像:

<!--  <plugin>
            <artifactId>maven-resources-plugin</artifactId>
            <version>2.5</version>
            <executions>
              <execution>
                <id>copy-target</id>
                <phase>install</phase>
                <goals>
                  <goal>copy-resources</goal>
                </goals>
                <configuration>
                  <outputDirectory>C:\jboss-as-7.1.1.Final_AMGEN\jboss-as-7.1.1.Final\standalone\deployments\spff.war\WEB-INF\classes</outputDirectory>
                  <resources>          
                    <resource>
                      <directory>${project.build.directory}\classes</directory>
                      <filtering>false</filtering>
                    </resource>
                  </resources>              
                </configuration>            
              </execution>
            </executions>
          </plugin> -->

所以我的情况是<directory>${project.build.directory}\classes</directory> 这里${project.build.directory}是在应用程序上下文级别初始化的变量,它返回项目目录路径。

所以你可以尝试一下。

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.Date;

public class PiyushDeployAutomation
{
    public static void main(String[] args)
    {   
        ArrayList<Date> al=new ArrayList<Date>();


        File srcFolder = new File("D:\\AMGEN_UI_4_11_16\\spff\\src\\main\\webapp\\assets");   
        //File destFolder = new File("C:\\jboss-as-7.1.1.Final_AMGEN\\jboss-as-7.1.1.Final\\standalone\\tmp\\vfs\\tempbe9a67f0e97b8b3d\\spff.war-e793c8e26b8f97be\\assets");
        File destFolder = new File("C:\\jboss-as-7.1.1.Final_AMGEN\\jboss-as-7.1.1.Final\\standalone\\tmp\\vfs\\temp4fd3e2919e5f49c6\\spff.war-bee751ebcb10d977\\assets");

        //File srcFolder2 = new File("C:\\jboss-as-7.1.1.Final_AMGEN\\jboss-as-7.1.1.Final\\standalone\\tmp\\vfs\\tempbe9a67f0e97b8b3d\\spff.war-e793c8e26b8f97be\\WEB-INF\\classes\\com");
        //File destFolder2 = new File("D:\\AMGEN_UI_4_11_16\\spff\\target\\classes\\com");

        File srcFolder2 = new File("D:\\AMGEN_UI_4_11_16\\spff\\target\\classes\\com");
        File destFolder2 = new File("C:\\jboss-as-7.1.1.Final_AMGEN\\jboss-as-7.1.1.Final\\standalone\\tmp\\vfs\\temp4fd3e2919e5f49c6\\spff.war-bee751ebcb10d977\\WEB-INF\\classes\\com");

        //File file = new File("C:\\Windows");
        File file = new File("C:\\jboss-as-7.1.1.Final_AMGEN\\jboss-as-7.1.1.Final\\standalone\\tmp\\vfs");
        String[] names = file.list();

        for(String name : names)
        {
            //if (new File("C:\\Windows\\" + name).isDirectory())
                if (new File("C:\\jboss-as-7.1.1.Final_AMGEN\\jboss-as-7.1.1.Final\\standalone\\tmp\\vfs\\" + name).isDirectory())
            {
                    System.out.println(name);
                    System.out.println(new Date(new File("C:\\jboss-as-7.1.1.Final_AMGEN\\jboss-as-7.1.1.Final\\standalone\\tmp\\vfs\\" + name).lastModified()));
                    al.add(new Date(new File("C:\\jboss-as-7.1.1.Final_AMGEN\\jboss-as-7.1.1.Final\\standalone\\tmp\\vfs\\" + name).lastModified()));
            }
                /*List l*/
        }

        //ArrayList al=new Date(new File("C:\\jboss-as-7.1.1.Final_AMGEN\\jboss-as-7.1.1.Final\\standalone\\tmp\\vfs\\" + name).lastModified());

        Collections.sort(al);
        Date lastModi=al.get(al.size()-2);
        for(String name : names)
        {
            //if (new File("C:\\Windows\\" + name).isDirectory())
                if (new File("C:\\jboss-as-7.1.1.Final_AMGEN\\jboss-as-7.1.1.Final\\standalone\\tmp\\vfs\\" + name).isDirectory())
            {
                    Date d=new Date(new File("C:\\jboss-as-7.1.1.Final_AMGEN\\jboss-as-7.1.1.Final\\standalone\\tmp\\vfs\\" + name).lastModified());

                    if(lastModi.compareTo(d)==0)
                    {
                        System.out.println(lastModi.compareTo(d));
                        System.out.println("found and name is ="+name);
                        System.out.println(""+d);
                        System.out.println(""+lastModi);
                        foldername=name;

                    }
            }
                /*List l*/
        }

        File file1 = new File("C:\\jboss-as-7.1.1.Final_AMGEN\\jboss-as-7.1.1.Final\\standalone\\tmp\\vfs\\"+foldername+"");
        String[] names1 = file1.list();


        File srcFolder_auto = new File("D:\\AMGEN_UI_4_11_16\\spff\\src\\main\\webapp\\assets");   
        //File destFolder = new File("C:\\jboss-as-7.1.1.Final_AMGEN\\jboss-as-7.1.1.Final\\standalone\\tmp\\vfs\\tempbe9a67f0e97b8b3d\\spff.war-e793c8e26b8f97be\\assets");
        File destFolder_auto = new File("C:\\jboss-as-7.1.1.Final_AMGEN\\jboss-as-7.1.1.Final\\standalone\\tmp\\vfs\\"+foldername+"assets");

        //File srcFolder2 = new File("C:\\jboss-as-7.1.1.Final_AMGEN\\jboss-as-7.1.1.Final\\standalone\\tmp\\vfs\\tempbe9a67f0e97b8b3d\\spff.war-e793c8e26b8f97be\\WEB-INF\\classes\\com");
        //File destFolder2 = new File("D:\\AMGEN_UI_4_11_16\\spff\\target\\classes\\com");

        File srcFolder2_auto = new File("D:\\AMGEN_UI_4_11_16\\spff\\target\\classes\\com");
        File destFolder2_auto = new File("C:\\jboss-as-7.1.1.Final_AMGEN\\jboss-as-7.1.1.Final\\standalone\\tmp\\vfs\\"+foldername+"WEB-INF\\classes\\com");

        //make sure source exists
        if(!srcFolder.exists()){

           System.out.println("Directory does not exist.");
           //just exit
           System.exit(0);

        }else{

           try{
               copyFolder(srcFolder,destFolder);
               copyFolder(srcFolder2,destFolder2);

           }catch(IOException e){
            e.printStackTrace();
            //error, just exit
                System.exit(0);
           }
        }

        System.out.println("Done");
    }

    public static void copyFolder(File src, File dest)
        throws IOException{

        if(src.isDirectory()){

            //if directory not exists, create it
            if(!dest.exists()){
               dest.mkdir();
               System.out.println("Directory copied from " 
                              + src + "  to " + dest);
            }

            //list all the directory contents
            String files[] = src.list();

            for (String file : files) {
               //construct the src and dest file structure
               File srcFile = new File(src, file);
               File destFile = new File(dest, file);
               //recursive copy
               copyFolder(srcFile,destFile);
            }

        }else{
            //if file, then copy it
            //Use bytes stream to support all file types
            InputStream in = new FileInputStream(src);
                OutputStream out = new FileOutputStream(dest); 

                byte[] buffer = new byte[1024];

                int length;
                //copy the file content in bytes 
                while ((length = in.read(buffer)) > 0){
                   out.write(buffer, 0, length);
                }

                in.close();
                out.close();
                System.out.println("File copied from " + src + " to " + dest);
        }
    }
}

此程序适用于JBOSS 1.7,用于替换战争中所有最新创建的.class,.js.jps文件,以便在运行此程序后,客户端将在您的开发环境中获取最新更新的文件。 它会减少将war文件一次又一次地部署到服务器的工作量,因为繁重的应用程序Maven cleaninstall是时候完成任务了。 根据您的方便编辑程序。