2011-12-19 15 views
8

私はMavenの/ Eclipseプロジェクトのためにかなり単純なディレクトリレイアウトを持っている:ソースディレクトリにファイルを含めるにはどうすればよいですか?

. 
├── pom.xml 
└── src 
    ├── main 
    │   ├── java 
    │   │   ├── org 
    │   │   │   └── tkassembled 
    │   │   │    └── maven 
    │   │   │     └── jasperreports 
    │   │   │      └── JasperReportsApplication.java 
    │   │   └── sampleReport.xml 
    │   └── resources 
    └── test 
     ├── java 
     └── resources 

11 directories, 3 files 

あなたが見ることができるように、私はJavaのソースディレクトリのベースでsampleReport.xmlファイルを持っているが、私は開こうとするとそれは、私がFileNotFoundExceptionを取得:

ここ
Exception in thread "main" java.io.FileNotFoundException: sampleReport.xml (No such file or directory) 
    at java.io.FileInputStream.open(Native Method) 
    at java.io.FileInputStream.<init>(FileInputStream.java:137) 
    at org.tkassembled.maven.jasperreports.JasperReportsApplication.main(JasperReportsApplication.java:34) 

だが、私のpom.xml

<?xml version="1.0"?> 
<project xmlns="http://maven.apache.org/POM/4.0.0" 
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
     xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 

    <modelVersion>4.0.0</modelVersion> 
    <groupId>org.tkassembled.maven</groupId> 
    <artifactId>jasperreports-test</artifactId> 
    <version>0.0.1-SNAPSHOT</version> 
    <name>JasperReports Testing</name> 

    <dependencies> 
     <!-- SLF4J --> 
     <dependency> 
      <groupId>org.slf4j</groupId> 
      <artifactId>slf4j-api</artifactId> 
      <version>1.6.4</version> 
     </dependency> 
     <dependency> 
      <groupId>org.slf4j</groupId> 
      <artifactId>log4j-over-slf4j</artifactId> 
      <version>1.6.4</version> 
     </dependency> 
     <!-- Logback --> 
     <dependency> 
      <groupId>ch.qos.logback</groupId> 
      <artifactId>logback-core</artifactId> 
      <version>1.0.0</version> 
     </dependency> 
     <dependency> 
      <groupId>ch.qos.logback</groupId> 
      <artifactId>logback-classic</artifactId> 
      <version>1.0.0</version> 
     </dependency> 
     <!-- JasperReports --> 
     <dependency> 
      <groupId>jasperreports</groupId> 
      <artifactId>jasperreports</artifactId> 
      <version>3.5.3</version> 
     </dependency> 
    </dependencies> 

    <build> 
     <plugins> 
      <plugin> 
       <groupId>org.apache.maven.plugins</groupId> 
       <artifactId>maven-compiler-plugin</artifactId> 
       <version>2.3.2</version> 
       <configuration> 
        <source>1.6</source> 
        <target>1.6</target> 
       </configuration> 
      </plugin> 
     </plugins> 
    </build> 
</project> 

そして、ここに私のJavaアプリケーションです。

package org.tkassembled.maven.jasperreports; 

import java.io.File; 
import java.io.FileInputStream; 
import java.io.FileOutputStream; 
import java.net.URI; 
import java.net.URL; 

import net.sf.jasperreports.engine.JasperCompileManager; 

import org.slf4j.Logger; 
import org.slf4j.LoggerFactory; 

public class JasperReportsApplication { 

    private static final Logger logger = LoggerFactory.getLogger(JasperReportsApplication.class); 

    /* 
    * There are basically four steps to a finished product: 
    *  <X> Design a report with a JRXML file. 
    *  <X> Compile the report to a binary, serialized JasperReport and save to disk. 
    *  <X> Fill the compiled report with data. 
    *  <X> Export it. 
    */ 
    public static void main(String[] args) throws Exception { 
     File jrxml = new File("sampleReport.xml"); 
//  URL url = JasperReportsApplication.class.getResource("sampleReport.xml"); 
//  File jrxml = new File(url.getFile()); 
     assert jrxml.exists(); 
     assert jrxml.isFile(); 

     File compileTarget = File.createTempFile("output", "jasper"); 

     FileInputStream jrxmlInput = new FileInputStream(jrxml); 
     FileInputStream jasperInput = new FileInputStream(compileTarget); 
     FileOutputStream jasperOutput = new FileOutputStream(compileTarget); 

//  compile the report 
     JasperCompileManager.compileReportToStream(jrxmlInput, jasperOutput); 

//  lol 

    } 
} 

このファイルは、ソースディレクトリのルートでどのように見つけることができますか?

+1

あなたのプログラムはJavaソースコードを作業ディレクトリとして実行しますが、次に、以下の '.getResourceAsStream()'を使用します。 – fge

+3

ASCIIツリーの場合+1 – SLaks

+0

nullを返したため@fge。 –

答えて

11

Mavenパッケージをプロジェクトの.jarに入れると、もうFileとしてアクセスできなくなります。このファイルには、実際にMavenの規則に従う代わりにsrc/main/javaディレクトリのsrc/main/resourcesディレクトリにする必要があります

JasperReportsApplication.class.getResourceAsStream("/sampleReport.xml") 

Streamとしてアクセスすることができ

、それはそれはJavaソースコードではないと言うことです。

+0

ありがとう、前の "/"は私が必要なものでした。私は文字通りのファイルシステム '/'に解決すると考えていました。 –

1

非ソースファイルは、デフォルトではsrc/main/resourcesフォルダーにあるはずです。

関連する問題