BAEL-5650 jar file path (#12463)
* BAEL-5650 jar file path * move to jar module
This commit is contained in:
parent
4c1e18b15e
commit
b372864029
|
@ -54,6 +54,12 @@
|
||||||
<artifactId>moneta</artifactId>
|
<artifactId>moneta</artifactId>
|
||||||
<version>${javamoney.moneta.version}</version>
|
<version>${javamoney.moneta.version}</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.mockito</groupId>
|
||||||
|
<artifactId>mockito-junit-jupiter</artifactId>
|
||||||
|
<version>${mockito.version}</version>
|
||||||
|
<scope>test</scope>
|
||||||
|
</dependency>
|
||||||
</dependencies>
|
</dependencies>
|
||||||
|
|
||||||
<build>
|
<build>
|
||||||
|
@ -266,6 +272,7 @@
|
||||||
<!-- util -->
|
<!-- util -->
|
||||||
<unix4j.version>0.4</unix4j.version>
|
<unix4j.version>0.4</unix4j.version>
|
||||||
<grep4j.version>1.8.7</grep4j.version>
|
<grep4j.version>1.8.7</grep4j.version>
|
||||||
|
<mockito.version>4.6.1</mockito.version>
|
||||||
<!-- maven plugins -->
|
<!-- maven plugins -->
|
||||||
<javamoney.moneta.version>1.1</javamoney.moneta.version>
|
<javamoney.moneta.version>1.1</javamoney.moneta.version>
|
||||||
<maven-javadoc-plugin.version>3.0.0-M1</maven-javadoc-plugin.version>
|
<maven-javadoc-plugin.version>3.0.0-M1</maven-javadoc-plugin.version>
|
||||||
|
|
|
@ -0,0 +1,42 @@
|
||||||
|
package com.baeldung.jarfile;
|
||||||
|
|
||||||
|
import java.net.URISyntaxException;
|
||||||
|
import java.net.URL;
|
||||||
|
import java.nio.file.Paths;
|
||||||
|
|
||||||
|
public class JarFilePathResolver {
|
||||||
|
|
||||||
|
public String getJarFilePath(Class clazz) {
|
||||||
|
try {
|
||||||
|
return byGetProtectionDomain(clazz);
|
||||||
|
} catch (Exception e) {
|
||||||
|
// cannot get jar file path using byGetProtectionDomain
|
||||||
|
// Exception handling omitted
|
||||||
|
}
|
||||||
|
return byGetResource(clazz);
|
||||||
|
}
|
||||||
|
|
||||||
|
String byGetProtectionDomain(Class clazz) throws URISyntaxException {
|
||||||
|
URL url = clazz.getProtectionDomain().getCodeSource().getLocation();
|
||||||
|
return Paths.get(url.toURI()).toString();
|
||||||
|
}
|
||||||
|
|
||||||
|
String byGetResource(Class clazz) {
|
||||||
|
final URL classResource = clazz.getResource(clazz.getSimpleName() + ".class");
|
||||||
|
if (classResource == null) {
|
||||||
|
throw new RuntimeException("class resource is null");
|
||||||
|
}
|
||||||
|
|
||||||
|
final String url = classResource.toString();
|
||||||
|
if (url.startsWith("jar:file:")) {
|
||||||
|
// extract 'file:......jarName.jar' part from the url string
|
||||||
|
String path = url.replaceAll("^jar:(file:.*[.]jar)!/.*", "$1");
|
||||||
|
try {
|
||||||
|
return Paths.get(new URL(path).toURI()).toString();
|
||||||
|
} catch (Exception e) {
|
||||||
|
throw new RuntimeException("Invalid Jar File URL String");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
throw new RuntimeException("Invalid Jar File URL String");
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,55 @@
|
||||||
|
package com.baeldung.jarfile;
|
||||||
|
|
||||||
|
import static org.assertj.core.api.Assertions.assertThat;
|
||||||
|
import static org.mockito.Mockito.never;
|
||||||
|
import static org.mockito.Mockito.times;
|
||||||
|
import static org.mockito.Mockito.verify;
|
||||||
|
import static org.mockito.Mockito.when;
|
||||||
|
|
||||||
|
import com.google.common.base.Ascii;
|
||||||
|
import java.io.File;
|
||||||
|
import java.net.URISyntaxException;
|
||||||
|
import org.junit.jupiter.api.Test;
|
||||||
|
import org.junit.jupiter.api.extension.ExtendWith;
|
||||||
|
import org.mockito.Spy;
|
||||||
|
import org.mockito.junit.jupiter.MockitoExtension;
|
||||||
|
|
||||||
|
@ExtendWith(MockitoExtension.class)
|
||||||
|
class JarFilePathResolverUnitTest {
|
||||||
|
@Spy
|
||||||
|
JarFilePathResolver jarFilePathResolver;
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void givenClassObjectWhenCallingByGetProtectionDomainShouldGetExpectedPath() throws Exception {
|
||||||
|
String jarPath = jarFilePathResolver.byGetProtectionDomain(Ascii.class);
|
||||||
|
assertThat(jarPath).endsWith(".jar").contains("guava");
|
||||||
|
assertThat(new File(jarPath)).exists();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void givenClassObjectWhenCallingByGetResourceShouldGetExpectedPath() {
|
||||||
|
String jarPath = jarFilePathResolver.byGetResource(Ascii.class);
|
||||||
|
assertThat(jarPath).endsWith(".jar").contains("guava");
|
||||||
|
assertThat(new File(jarPath)).exists();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void givenClassObjectWhenNoSecurityExceptionRaisedShouldGetExpectedPath() throws URISyntaxException {
|
||||||
|
String jarPath = jarFilePathResolver.getJarFilePath(Ascii.class);
|
||||||
|
assertThat(jarPath).endsWith(".jar").contains("guava");
|
||||||
|
assertThat(new File(jarPath)).exists();
|
||||||
|
verify(jarFilePathResolver, times(1)).byGetProtectionDomain(Ascii.class);
|
||||||
|
verify(jarFilePathResolver, never()).byGetResource(Ascii.class);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void givenClassObjectWhenSecurityExceptionRaisedShouldGetExpectedPath() throws URISyntaxException {
|
||||||
|
when(jarFilePathResolver.byGetProtectionDomain(Ascii.class)).thenThrow(new SecurityException("not allowed"));
|
||||||
|
String jarPath = jarFilePathResolver.getJarFilePath(Ascii.class);
|
||||||
|
assertThat(jarPath).endsWith(".jar").contains("guava");
|
||||||
|
assertThat(new File(jarPath)).exists();
|
||||||
|
verify(jarFilePathResolver, times(1)).byGetProtectionDomain(Ascii.class);
|
||||||
|
verify(jarFilePathResolver, times(1)).byGetResource(Ascii.class);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -13,7 +13,6 @@
|
||||||
<artifactId>core-java-modules</artifactId>
|
<artifactId>core-java-modules</artifactId>
|
||||||
<version>0.0.1-SNAPSHOT</version>
|
<version>0.0.1-SNAPSHOT</version>
|
||||||
</parent>
|
</parent>
|
||||||
|
|
||||||
<build>
|
<build>
|
||||||
<finalName>core-java-lang-5</finalName>
|
<finalName>core-java-lang-5</finalName>
|
||||||
<resources>
|
<resources>
|
||||||
|
@ -23,5 +22,4 @@
|
||||||
</resource>
|
</resource>
|
||||||
</resources>
|
</resources>
|
||||||
</build>
|
</build>
|
||||||
|
|
||||||
</project>
|
</project>
|
Loading…
Reference in New Issue