2017-12-30 55 views
1

JasperReports를 사용하여 보고서를 만드는 Java 프로그램을 만들었습니다. 내 JasperReports 중 하나에서 나는 theme = "eye.candy.sixties"를 사용합니다.Java Maven Jasperreport가 Eclipse에서 실행되었습니다. java-jar에서 확인되었습니다. JRRuntimeException : 차트 테마 "eye.candy.sixties"가 없습니다.

나는 GUI에서 이클립스에서 프로젝트를 실행할 때, 모두 괜찮습니다, 내가 메이븐과 같은 프로젝트를 빌드하고 명령 줄에서 실행할 때 내가 오류 enter image description here

를 참조하십시오

Maven: clean compile assembly:single 
Command line: java -jar chartTheme-0.0.1-SNAPSHOT-jar-with-dependencies.jar 

Exception in thread "main" net.sf.jasperreports.engine.JRRuntimeException: Chart theme "eye.candy.sixties" not found.

무엇이 변경 되었습니까? 도움을 환영합니다!

코드는 Github에서 찾을 수 있습니다

출처 : ChartTheme

이클립스에서 "메이븐 종속성 목록을 참조 메이븐에서 차트 테마 종속성을 포함했다 :

enter image description here 아래의 코드에서

(POM을 당신이 당신의 내장 공동 라이브러리 chartTheme-0.0.1-SNAPSHOT-jar-with-dependencies.jar를 열면 .XML)

<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>com.lightroomstatistics.samples</groupId> 
    <artifactId>chartTheme</artifactId> 
    <version>0.0.1-SNAPSHOT</version> 
    <name>chartTheme</name> 
    <description>chartTheme</description> 

    <url>www.lightroomstatistics.com</url> 
    <organization> 
     <name>LightroomStatistics</name> 
     <url>www.lightroomstatistics.com</url> 
    </organization> 

    <parent> 
     <groupId>com.lightroomstatistics.maven</groupId> 
     <artifactId>lightroomstatistics-parent-pom</artifactId> 
     <version>1.0.0</version> 
    </parent> 

    <properties> 
     <java.version>1.8</java.version> 
     <jasperreports.version>6.4.0</jasperreports.version> 
     <jasperreportsfonts.version>4.0.0</jasperreportsfonts.version> 
     <maven.compiler.target>1.8</maven.compiler.target> 
     <maven.compiler.source>1.8</maven.compiler.source> 
    </properties> 

    <repositories> 
     <!-- Needed for Jasperreports chart-themes --> 
     <repository> 
      <id>jr-ce-releases</id> 
      <name>JasperReports CE Releases</name> 
      <url>http://jaspersoft.jfrog.io/jaspersoft/jr-ce-releases</url> 
     </repository> 
    </repositories> 

    <dependencies> 
     <dependency> 
      <groupId>net.sf.jasperreports</groupId> 
      <artifactId>jasperreports</artifactId> 
      <version>${jasperreports.version}</version> 
     </dependency> 
     <dependency> 
      <groupId>net.sf.jasperreports</groupId> 
      <artifactId>jasperreports-fonts</artifactId> 
      <version>${jasperreportsfonts.version}</version> 
     </dependency> 
     <!-- jasperreports-chart-themes --> 
     <dependency> 
      <groupId>net.sf.jasperreports</groupId> 
      <artifactId>jasperreports-chart-themes</artifactId> 
      <version>${jasperreports.version}</version> 
     </dependency> 
    </dependencies> 

    <build> 
     <resources> 
      <resource> 
       <directory>reports</directory> 
       <includes> 
        <include>**/*.*</include> 
       </includes> 
      </resource> 
      <resource> 
       <directory>data</directory> 
       <includes> 
        <include>**/*.*</include> 
       </includes> 
      </resource> 
     </resources> 

     <plugins> 
      <plugin> 
       <artifactId>maven-resources-plugin</artifactId> 
       <version>3.0.2</version> 
       <executions> 
        <execution> 
         <id>copy-report-resources</id> 
         <!-- here the phase you need --> 
         <phase>validate</phase> 
         <goals> 
          <goal>copy-resources</goal> 
         </goals> 
         <configuration> 
          <outputDirectory>${basedir}/target/reports</outputDirectory> 
          <resources> 
           <resource> 
            <directory>reports</directory> 
            <filtering>true</filtering> 
           </resource> 
          </resources> 
         </configuration> 
        </execution> 
        <execution> 
         <id>copy-data-resources</id> 
         <!-- here the phase you need --> 
         <phase>validate</phase> 
         <goals> 
          <goal>copy-resources</goal> 
         </goals> 
         <configuration> 
          <outputDirectory>${basedir}/target/data</outputDirectory> 
          <resources> 
           <resource> 
            <directory>data</directory> 
            <filtering>true</filtering> 
           </resource> 
          </resources> 
         </configuration> 
        </execution> 
       </executions> 
      </plugin> 
      <plugin> 
       <artifactId>maven-assembly-plugin</artifactId> 
       <configuration> 
        <archive> 
         <manifest> 
          <mainClass>chartTheme.ChartThemesApp</mainClass> 
         </manifest> 
        </archive> 
        <descriptorRefs> 
         <descriptorRef>jar-with-dependencies</descriptorRef> 
        </descriptorRefs> 
       </configuration> 
       <executions> 
        <execution> 
         <id>make-assembly</id> 
         <phase>package</phase> 
         <goals> 
          <goal>single</goal> 
         </goals> 
        </execution> 
       </executions> 
      </plugin> 
     </plugins> 
    </build> 

</project> 

답변

1

, 당신은 깨달을 것이다 해당 파일 jasperreports-char-themes-6.4.0.jar/jasperreports_extension.properties의 내용 종속성에있는 다른 jasperreports_extension.properties 파일의 내용으로 덮어 쓰기 때문에 missing입니다. 당신이 mvn assembly을 실행 한 후 출력 콘솔에서 검색하면

사실, 이러한 흔적을 찾을 수 있습니다 :

이 방법에 의해 유일한 파일이 아닌,

[INFO] jasperreports_extension.properties already added, skipping

이 ... 조립에 생략 .

따라서 겹치기 때문에 이러한 종속성을 함께 모으는 것은 좋지 않습니다. 적어도, 이런 방식으로는 안된다.

나는 (로그의 흔적하여 게시) 당신이 시도해야 할 첫 번째 일은 내가 jasperreports-chart-themes.jar에있는 사람이 될 것입니다 추정 원하는 사람을 priorizing 원하지 않는 파일을 제외 할 assembly descriptor file 변수화하는 것입니다 생각합니다.

0

이 문제를 조사해 주셔서 감사합니다. 리틀 산티가 내게 그 문제가 무엇인지 설명했다. 또한 큰 JAR를 갖고 싶어하지 않으므로 모든 종속성 jar를 별도의 lib 디렉토리/폴더에 저장하기로 결정했습니다. 이것은 잘 동작했다.

<build> 
    <plugins> 
     <plugin> 
      <groupId>org.apache.maven.plugins</groupId> 
      <artifactId>maven-jar-plugin</artifactId> 
      <configuration> 
       <archive> 
        <manifest> 
         <addClasspath>true</addClasspath> 
         <classpathPrefix>lib/</classpathPrefix> 
         <mainClass>chartTheme.ChartThemesApp</mainClass> 
        </manifest> 
       </archive> 
       <finalName>${project.name}</finalName> 
      </configuration> 
     </plugin> 
     <plugin> 
      <groupId>org.apache.maven.plugins</groupId> 
      <artifactId>maven-dependency-plugin</artifactId> 
      <version>2.5.1</version> 
      <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> 
    </plugins> 
</build> 
+0

큰 병을 가지고있는 것보다 훨씬 낫다고 생각합니다. 축하해! –