我正在尝试引用Java应用程序中的一些文件,这些文件将被复制到WAR中。
我是Maven的新手,但基本上文件是
我尝试过相对路径,例如
File source = new File("../../../webapp/resources/folder");
但永远不能从班级访问该文件夹。
有替代方法吗?
答案 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 clean
和install
是时候完成任务了。
根据您的方便编辑程序。