Github user chtyim commented on a diff in the pull request:

    https://github.com/apache/twill/pull/1#discussion_r75149838
  
    --- Diff: 
twill-core/src/main/java/org/apache/twill/internal/ApplicationBundler.java ---
    @@ -215,8 +215,19 @@ public boolean accept(String className, URL classUrl, 
URL classPathUrl) {
       private void putEntry(String className, URL classUrl, URL classPathUrl, 
Set<String> entries, JarOutputStream jarOut) {
         String classPath = classPathUrl.getFile();
         if (classPath.endsWith(".jar")) {
    +      String entryName = classPath.substring(classPath.lastIndexOf('/') + 
1);
    +      // need unique name or else we lose classes (TWILL-181)
    +      if (entries.contains(SUBDIR_LIB + entryName)) {
    +        String[] parts = classPath.split("/");
    --- End diff --
    
    I don't quite understand this part of the logic. Is it trying to use some 
parent directory name as the entryName? Seems like it would lost the original 
name. Also, if the jar is already at the root directory, then it will be using 
the original "entryName", which would still result in name conflict? I would 
suggest simply use package name (derived from `className`) and a random uuid to 
make it unique if there is conflict. Something like:
    
    ```java
    String entryName = classPath.substring(classPath.lastIndexOf('/') + 1);
    if (entries.contains(SUBDIR_LIB + entryName)) {
      entryName = entryName.substring(0, entryName.lastIndexOf('.')) + "-" + 
className.substring(0, className.lastIndexOf('.')) + "-" + UUID.randomUUID() + 
".jar";
    }
    ```


---
If your project is set up for it, you can reply to this email and have your
reply appear on GitHub as well. If your project does not have this feature
enabled and wishes so, or if the feature is enabled but not working, please
contact infrastructure at infrastruct...@apache.org or file a JIRA ticket
with INFRA.
---

Reply via email to