Maven-jar에 임의의 클래스 경로 항목을 어떻게 추가 할 수 있습니까?
실행 가능한 jar의 매니페스트에 임의의 클래스 경로 항목 (jar 파일을 가리키는)을 추가해야하는 비정상적인 상황이 있습니다. (Swing 데스크톱 애플리케이션 용입니다.)
maven-jar-plugin은 maven 종속성을 사용하여 jar 매니페스트에 대한 "Class-Path"항목을 생성하며 임의 항목을 추가하는 방법이없는 것 같습니다.
또한 "-classpath"매개 변수를 사용하여 임의의 클래스 경로 항목을 응용 프로그램을 시작하는 배치 파일에 하드 코딩하는 방법을 살펴 보았지만 Maven이 클래스 경로를 배치 파일로 필터링하도록하는 방법을 알 수 없습니다.
이 문제에 대한 쉬운 해결책이 있다는 것을 알았습니다. <Class-Path>
요소에 <manifestEntries>
요소를 추가하고 요소로 설정할 <addClassPath>true</addClassPath>
수 <manifest>
있습니다. 따라서 <Class-Path>
요소의 값은 클래스 경로에 자동으로 추가됩니다. 예:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<configuration>
<archive>
<manifest>
<addDefaultImplementationEntries>true</addDefaultImplementationEntries>
<addClasspath>true</addClasspath>
<mainClass>your.main.Class</mainClass>
</manifest>
<manifestEntries>
<Class-Path>../conf/</Class-Path>
</manifestEntries>
</archive>
</configuration>
</plugin>
업데이트 : 다음은 클래스 경로를 사용자 지정 매니페스트로 필터링하는 방법입니다.
maven-dependency-plugin의 build-classpath
목표는 속성 형식 (예 : classpath = [classpath])의 파일에 클래스 경로를 출력하도록 구성 할 수 있습니다. 그런 다음 생성 된 클래스 경로 파일을 사용하도록 filters 요소를 구성하고 필터링 할 리소스 디렉토리를 구성합니다.
예를 들면 :
<build>
<plugins>
<plugin>
<artifactId>maven-dependency-plugin</artifactId>
<version>2.1</version>
<executions>
<execution>
<phase>generate-resources</phase>
<goals>
<goal>build-classpath</goal>
</goals>
</execution>
</executions>
<configuration>
<outputFilterFile>true</outputFilterFile>
<outputFile>${project.build.directory}/classpath.properties</outputFile>
</configuration>
</plugin>
<plugin>
<artifactId>maven-jar-plugin</artifactId>
<configuration>
<archive>
<manifestFile>
${project.build.outputDirectory}/META-INF/MANIFEST.MF
</manifestFile>
</archive>
</configuration>
</plugin>
</plugins>
<filters>
<filter>${project.build.directory}/classpath.properties</filter>
</filters>
<resources>
<resource>
<directory>src/main/resources</directory>
<filtering>true</filtering>
</resource>
</resources>
</build>
그런 다음 src / main / resources / META-INF / Manifest.MF에 다음을 지정합니다.
Bundle-Version: 4.0.0
...
Classpath: ${classpath};[specify additional entries here]
Note: there is a bug with this processing using the standard window path separator (\
), the generate path is stripped of separators (note it works fine on Linux). You can get the classpath to be generated correctly for Windows by specifying <fileSeparator>\\\\</fileSeparator>
in the build-classpath
goal's configuration.
You can customise the manifest in the jar-plugin's configuration. To do so you'd add something like this to your pom.
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
...
<configuration>
<archive>
<index>true</index>
<manifest>
<addClasspath>true</addClasspath>
</manifest>
<manifestEntries>
<mode>development</mode>
<url>${pom.url}</url>
<key>value</key>
</manifestEntries>
</archive>
</configuration>
...
</plugin>
The full archiver specification provides quite a few options. See the examples page for options on configuring the classpath.
If none of these work for you, you can define your own Manifest, set up properties containing the required entries and use a filter to populate the manifest with those properties
Try to do it like they do in this bug, i.e. merge entries using manifestEntries/Class-Path element
'code' 카테고리의 다른 글
./ 도트 슬래시로 시작하는 경로가있는 현재 디렉토리의 GitLab 마크 다운에서 이미지를 어떻게 참조 할 수 있습니까? (0) | 2020.11.28 |
---|---|
순서에 관계없이 문자열 목록의 해시 가져 오기 (0) | 2020.11.28 |
CodeIgniter에서 pconnect 옵션의 장점 / 단점 (0) | 2020.11.28 |
Java / ImageIO가 전체 파일을 읽지 않고 이미지 크기를 얻습니까? (0) | 2020.11.27 |
Scala는 꼬리 재귀 최적화를 지원합니까? (0) | 2020.11.27 |