2017-03-01 9 views
0

속성 파일을 포함하는 maven assemble을 사용하여 far jar 파일을 만들었습니다. 그것은 내 IDE에서 작동합니다. 그러나, 내가 package 후에 내 모든 응용 프로그램이 작동하지 않습니다.Java Guava Resources.getResource가 원거리에서 작동하지 않습니다.

나는 src/main/resources 내 모든 등록 정보 파일을 가지고 내가이 오류를 얻을 지방 항아리에서 내 프로그램을 실행할 때 나는 특성이

그러나 루트 폴더에 파일을 참조 jar tf farjar.jar를 사용에서 확인할 수 있습니다

Exception in thread "main" java.lang.IllegalArgumentException: resource ci.properties not found. 
    at com.google.common.base.Preconditions.checkArgument(Preconditions.java:119) 
    at com.google.common.io.Resources.getResource(Resources.java:191) 
    at io.conde.config.ConfigReader.read(ConfigReader.java:23) 
    at io.conde.SparrowHalToS3.main(SparrowHalToS3.java:46) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
    at java.lang.reflect.Method.invoke(Method.java:497) 
    at org.apache.spark.deploy.SparkSubmit$.org$apache$spark$deploy$SparkSubmit$$runMain(SparkSubmit.scala:736) 
    at org.apache.spark.deploy.SparkSubmit$.doRunMain$1(SparkSubmit.scala:185) 
    at org.apache.spark.deploy.SparkSubmit$.submit(SparkSubmit.scala:210) 
    at org.apache.spark.deploy.SparkSubmit$.main(SparkSubmit.scala:124) 
    at org.apache.spark.deploy.SparkSubmit.main(SparkSubmit.scala) 

다음은 내 작품입니다.

<resources> 
      <resource> 
       <directory>src/main/resources</directory> 
       <includes> 
        <include>**/*</include> 
       </includes> 
      </resource> 
     </resources> 
     <plugins> 
      <plugin> 
       <artifactId>maven-assembly-plugin</artifactId> 
       <version>2.4.1</version> 
       <configuration> 
        <descriptorRefs> 
         <descriptorRef>jar-with-dependencies</descriptorRef> 
        </descriptorRefs> 
       </configuration> 
       <executions> 
        <execution> 
         <id>make-assembly</id> 
         <phase>package</phase> 
         <goals> 
          <goal>assembly</goal> 
         </goals> 
        </execution> 
       </executions> 
      </plugin> 

그리고 여기 내 코드는 구아바를 사용합니다.

public Properties read(String environment) throws IOException { 
     final URL url = Resources.getResource(format("%s.properties", environment)); 
     final ByteSource byteSource = Resources.asByteSource(url); 
     InputStream inputStream = null; 
     try { 
      inputStream = byteSource.openBufferedStream(); 
      properties.load(inputStream); 

      return properties; 
     } catch (final IOException ioException) { 
      LOG.error(ioException.getMessage()); 
     } finally { 
      if (inputStream != null) { 
       try { 
        inputStream.close(); 
       } catch (final IOException ioException) { 
        LOG.error(ioException.getMessage()); 
       } 
      } 
     } 
     return null; 
    } 
+0

리소스의 추가 구성이 제거되어 기본값이 제거되었습니다. 게다가 자원을 얻으려면'getResource ("/ ...")'를 설정해야합니다. – khmarbaise

+0

이제'resource /ci.properties를 찾을 수 없습니다. ' – toy

+0

jar 파일에 리소스가 올바르게 포함되어 있습니까? jar 파일의 내용을 확인 했습니까? – khmarbaise

답변

0

대신 SomeClassThatShouldBeInTheSameJar.class.getResource(<whatever>)을 사용해 보셨습니까? Resources.getResource은 기본적으로 현재 스레드의 컨텍스트 클래스 로더 또는 Resources.class에 대한 클래스 로더를 사용하여 리소스를 조회하는 래퍼입니다. 많은 경우에 효과가 있지만 어떤 경우에는 다른 것을해야 할 것입니다.