RFR: JDK-8212780: JEP 343: Packaging Tool Implementation

Roger Riggs Roger.Riggs at oracle.com
Wed Nov 14 15:08:45 UTC 2018


Hi,

On 11/14/2018 09:52 AM, Andy Herrick wrote:
>
> On 11/13/2018 5:50 PM, Philip Race wrote:
>>
>>
>> On 11/13/18, 12:52 PM, Roger Riggs wrote:
>>> Hi,
>>>
>>> There are enough files unique to each platform to put them in 
>>> separate packages
>>> otherwise you get too many (IMHO) files in a single 
>>> package/directory and
>>> its harder to tell which go with which.  There isn't much of a 
>>> problem with
>>> classes being public because they are all in a module and not exported.
>>>
>>> I would put them all under 
>>> share/classes/jdk/jpackagers/internal/<OS> and
>>> save a directory level.
>>
>> That isn't how the rest of the JDK is organised.
>> Platform specific classes are split where you have "share" in the 
>> path above.
>> So whilst the other issues are more arguable I don't think the build 
>> team
>> would like platform specific classes under share. There is already an
>> objection to that for the native files.
>>
>> To the "too many files in one package/directory" point.
>> I think that might happen at the directory level if Andy went through 
>> with
>> his suggestion but I don't think it will happen with what I proposed and
>> we probably should get some benefit from being able to make classes + 
>> methods
>> package private.
>
> but my proposal only increases the number of files in each directory 
> as follows:
>
> share/classes/jdk/jpackager/internal       - from 28 to 31
>
> windows/classes/jdk/jpackager/internal - from 6 to 7
>
> macosx/classes/jdk/jpackager/internal   - from 6 to 7
>
> linux/classes/jdk/jpackager/internal        - from 3 to 4
>
> (adding Main.java, that makes are only 50 source files total)
>
> so I hardly see any any impact of having "too many files in one 
> package/directory"
>
> and for Phil's part of the change, although the platform dependent 
> source files would be in the same package as the platform independent 
> files, they are still in a different source dir, and every platform 
> specific source file's name starts with the platform ("Win", "Mac", or 
> "Linux")
This should be fine, since there is no need to for cross-platform support,
the reason for the top level platform directory is so the build can be 
selectively
include the right files.

I assume the service loader mechanism deals with all the issues in 
locating platform specific files.
>
>
> finally a question about resources:
>
> Each source file that references resources has it's own resource file 
> (23 resource files in each of 3 languages for a total of 69 properties 
> files).
>
> That seems like overkill to me. One result is duplicate resources 
> whenever a key is referenced in more than one source file.
>
> Wouldn't it simplify things to combine these into a smaller set of 
> resource files ?
agreed, there should be fewer resource files to track and maintain and 
NO duplication.

Roger

>
>
> /Andy
>
>
>>
>> So I think what I proposed is about right ..
>>
>> phil
>>>
>>> $.02, Roger
>>>
>>>
>>> On 11/13/2018 03:46 PM, Andy Herrick wrote:
>>>> I agree with this and would take it further.
>>>>
>>>> 1 file is in ./share/classes/jdk/jpackager/internal/builders - why 
>>>> not just ./share/classes/jdk/jpackager/internal
>>>>
>>>> 2 files are in ./share/classes/jdk/jpackager/internal/bundlers - 
>>>> why not just in ./share/classes/jdk/jpackager/internal
>>>>
>>>> 1 file is in ./linux/classes/jdk/jpackager/internal/builders/linux 
>>>> - why not just ./linux/classes/jdk/jpackager/internal
>>>>
>>>> 1 file is in ./macosx/classes/jdk/jpackager/internal/builders/mac - 
>>>> why not just ./macosx/classes/jdk/jpackager/internal
>>>>
>>>> 1 file is in 
>>>> ./windows/classes/jdk/jpackager/internal/builders/windows - why not 
>>>> just ./windows/classes/jdk/jpackager/internal
>>>>
>>>> then just move the associated resources -
>>>>
>>>> Basically put everything except Main in same package - everything 
>>>> would be easier to find, and we could make almost all methods 
>>>> package-private (the only exception would be the few things called 
>>>> by Main, and the ToolProvider.
>>>>
>>>>
>>>> On 11/13/2018 2:54 PM, Phil Race wrote:
>>>>> Question .. why is "mac", "linux" and "windows" necessary in the 
>>>>> package name here ?
>>>>>
>>>>>  src/jdk.jpackager/macosx/classes/jdk/jpackager/internal/mac/MacAppBundler.java 
>>>>>
>>>>>  src/jdk.jpackager/windows/classes/jdk/jpackager/internal/builders/windows/WindowsAppImageBuilder.java 
>>>>>
>>>>> src/jdk.jpackager/linux/classes/jdk/jpackager/internal/linux/LinuxRpmBundler.java 
>>>>>
>>>>>
>>>>> There's not likely to be a clash, so is there some other reason 
>>>>> not to want these
>>>>> in the same package as the shared internals like
>>>>> src/jdk.jpackager/share/classes/jdk/jpackager/internal/Param.java
>>>>>
>>>>> ?
>>>>>
>>>>> -phil.
>>>>



More information about the core-libs-dev mailing list