55
66package com .microsoft .azure .toolkit .intellij .legacy .function .runner .core ;
77
8- import com .google .gson .JsonObject ;
98import com .intellij .codeInsight .AnnotationUtil ;
109import com .intellij .codeInsight .MetaAnnotationUtil ;
1110import com .intellij .lang .jvm .JvmAnnotation ;
5251import org .jetbrains .idea .maven .project .MavenProject ;
5352import org .jetbrains .idea .maven .project .MavenProjectsManager ;
5453
54+ import javax .annotation .Nonnull ;
5555import javax .annotation .Nullable ;
5656import java .io .File ;
5757import java .io .IOException ;
6969import java .util .List ;
7070import java .util .Map ;
7171import java .util .concurrent .Callable ;
72+ import java .util .regex .Matcher ;
73+ import java .util .regex .Pattern ;
7274import java .util .stream .Collectors ;
7375
7476import static com .microsoft .azure .toolkit .intellij .common .AzureBundle .message ;
7779public class FunctionUtils {
7880 private static final int MAX_PORT = 65535 ;
7981
80- public static final String FUNCTION_JAVA_LIBRARY_ARTIFACT_ID = "azure-functions-java-library" ;
8182 private static final String AZURE_FUNCTION_ANNOTATION_CLASS =
8283 "com.microsoft.azure.functions.annotation.FunctionName" ;
8384 private static final String FUNCTION_JSON = "function.json" ;
@@ -94,6 +95,7 @@ public class FunctionUtils {
9495 private static final String AZURE_FUNCTIONS_APP_SETTINGS = "Azure Functions App Settings" ;
9596 private static final String AZURE_FUNCTIONS_JAVA_LIBRARY = "azure-functions-java-library" ;
9697 private static final String AZURE_FUNCTIONS_JAVA_CORE_LIBRARY = "azure-functions-java-core-library" ;
98+ private static final Pattern ARTIFACT_NAME_PATTERN = Pattern .compile ("(.*)-(\\ d+\\ .)?(\\ d+\\ .)?(\\ *|\\ d+).*" );
9799
98100 static {
99101 //initialize required attributes, which will be saved to function.json even if it equals to its default value
@@ -179,7 +181,7 @@ public static boolean isFunctionProject(Project project) {
179181 }
180182 final List <Library > libraries = new ArrayList <>();
181183 OrderEnumerator .orderEntries (project ).productionOnly ().forEachLibrary (library -> {
182- if (StringUtils .contains (library .getName (), FUNCTION_JAVA_LIBRARY_ARTIFACT_ID )) {
184+ if (StringUtils .containsAnyIgnoreCase (library .getName (), AZURE_FUNCTIONS_JAVA_LIBRARY , AZURE_FUNCTIONS_JAVA_CORE_LIBRARY )) {
183185 libraries .add (library );
184186 }
185187 return true ;
@@ -295,18 +297,25 @@ public static Map<String, FunctionConfiguration> prepareStagingFolder(Path stagi
295297 });
296298 }
297299 final String libraryToExclude = dependencies .stream ()
298- .filter (artifact -> StringUtils .equalsAnyIgnoreCase (artifact .getName (), AZURE_FUNCTIONS_JAVA_CORE_LIBRARY ))
299- .map (File ::getName ).findFirst ().orElse (AZURE_FUNCTIONS_JAVA_LIBRARY );
300+ .map (FunctionUtils ::getArtifactIdFromFile )
301+ .filter (name -> StringUtils .equalsAnyIgnoreCase (name , AZURE_FUNCTIONS_JAVA_CORE_LIBRARY ))
302+ .findFirst ().orElse (AZURE_FUNCTIONS_JAVA_LIBRARY );
300303
301304 final File libFolder = new File (stagingFolder .toFile (), "lib" );
302305 for (final File file : dependencies ) {
303- if (!StringUtils .containsIgnoreCase ( file . getName ( ), libraryToExclude )) {
306+ if (!StringUtils .equalsIgnoreCase ( getArtifactIdFromFile ( file ), libraryToExclude )) {
304307 FileUtils .copyFileToDirectory (file , libFolder );
305308 }
306309 }
307310 return configMap ;
308311 }
309312
313+ private static String getArtifactIdFromFile (@ Nonnull final File file ) {
314+ final Matcher matcher = ARTIFACT_NAME_PATTERN .matcher (file .getName ());
315+ return matcher .matches () ? StringUtils .substringBeforeLast (file .getName (), "-" ) :
316+ StringUtils .substringBeforeLast (file .getName (), ".jar" );
317+ }
318+
310319 public static String getTargetFolder (Module module ) {
311320 if (module == null ) {
312321 return StringUtils .EMPTY ;
0 commit comments