2012-05-05 6 views
2

포크,jar 파일의 루트에 Maven 패키징 이미지

Eclipse를 사용하여 Java 응용 프로그램을 개발 중입니다. Maven은 최종 jar 파일을 만드는 데 사용됩니다.

응용 프로그램에서 버튼에 대한 일부 이미지 아이콘을 사용합니다. 인터넷에서 몇 가지 지침을 따라 프로젝트를 클릭하여 "소스"디렉토리를 만들었습니다. 소스 디렉토리의 이름을 "res"로 지정하고 이미지를이 디렉토리로 옮겼습니다.


public static ImageIcon getIcon() { 
    if (isThisJarfile()) { 
    URL url = this.class.getResources("/res/myicon.png"); 
    return new ImageIcon(url); 
    }else { 
    return new ImageIcon("/res/myicon.png"); 
    } 
} 

응용 프로그램이 jar 파일로 패키지되지 않은 경우 (디버깅에 유용함)이 방법이 유용합니다. 그러나 maven 패키지를 만들 때 이미지가 jar 파일의 루트 디렉토리에 저장되는 것을 볼 수 있습니다. 다음 전화가 작동합니다.

 
    URL url = this.class.getResource("/myicon.png"); 

제가 간과 한 몇 가지 단계가 있는지 궁금합니다.

이미지에 대해 pom.xml에 특별한 작업을 수행 할 필요가 없었 음을 유의하십시오. 메이븐 (Maven)은 자동으로 선택합니다 (잘못된 위치에 넣는 것을 제외하고).

도움을 주셔서 감사합니다. 당신은 표준 메이븐 프로젝트의 디렉토리 구조를 다음과 같은 경우

감사합니다, 피터

답변

5

를 살펴 보자. 예를 들어 서브 디렉토리 images을 작성하여 전체 경로가 src/main/resources/images이되도록 할 수 있습니다. 이 디렉토리에는 모든 응용 프로그램 이미지가 포함됩니다.

응용 프로그램을 패키지화 할 때 이미지에 올바르게 액세스하려면 특히주의해야합니다. 예를 들어, 다음 함수는 필요한 모든 것을 수행해야합니다.

public static Image getImage(final String pathAndFileName) { 
    final URL url = Thread.currentThread().getContextClassLoader().getResource(pathAndFileName); 
    return Toolkit.getDefaultToolkit().getImage(url); 
} 

이 기능은 이미지 디렉토리에 some-image.png 파일을로드하기 위해 getImage("images/some-image.png")로 사용할 수 있습니다.

ImageIcon이 필요한 경우 new ImageIcon(getImage("images/some-image.png"))을 호출하면 트릭을 수행합니다.

+0

이것은 병 내부와 외부에서 완벽하게 작동했습니다. 당신의 도움을 주셔서 대단히 감사합니다. 문안 인사. Peter – Peter

+0

하지만 왜 webapp 대신 리소스 아래에 두어야합니까? 리소스 아래에두면 이미지가 정적 파일이기 때문에 WEB-INF 아래의 클래스 파일에 이미지가 배치됩니다. – robben

0

는이 src/main/resources 아래에있는 모든 비 Java 자원을 넣어하는 것이 가장 좋습니다 maven resources plugin

0

나는 메이븐 프로젝트의 루트에 내 favicon을 가지고 있었지만 생성 된 전쟁에 포함되지 않았다. 검색 엔진을 많이 사용하여 maven 도움말 페이지에서 해결책을 얻었습니다.

<plugin> 
<groupId>org.apache.maven.plugins</groupId> 
<artifactId>maven-war-plugin</artifactId> 
<version>3.0.0</version> 
<configuration> 
    <webResources> 
    <resource> 
     <directory>${project.basedir}</directory> 
     <!-- the list has a default value of ** --> 
     <includes> 
     <include>favicon.ico</include> 
     </includes> 
    </resource> 
    </webResources> 
</configuration> 
</plugin>