microsoft / vscode-java-dependency

Manage Java projects in Visual Studio Code.
https://marketplace.visualstudio.com/items?itemName=vscjava.vscode-java-dependency
MIT License
150 stars 73 forks source link

Some exporting jar suggestions #298

Closed clankill3r closed 2 years ago

clankill3r commented 4 years ago

First off all, thanks for all the effort so far. I like to where this is going!

I would like a way to include / exclude specific files or folders from the src. For example I have a folder sfjl and sfjl_examples, and I don't want the sfjl_examples folders included in the jar file.

Screen Shot 2020-08-13 at 07 04 38

Second, it would be nice to store export settings in settings.json. For example, I would love something like this:

{
    "java.jar.exports": [
        {
            "name": "sfjl",
            "exludes": [
                "/sfjl/SFJL_Profiler*",
                "/sfjl_examples"
            ],
            "manifest": "${workspaceFolder}/manifests/sfjl_manifest.mf"
        },
        {
            "name": "sfjl_profiler",
            "exludes": [
                "*"
            ],
            "includes": [
                "/sfjl/SFJL_Profiler"
            ],
            "manifest": "${workspaceFolder}/manifests/sfjl_profiler_manifest.mf"
        }

    ]
}
jdneo commented 4 years ago

@clankill3r

Have a setting to customize the export action looks good. One thing I'm thinking about is:

for the excludes and includes pattern, I think its better to put the final content there, which are the class files, not the source files. Does that make sense?

clankill3r commented 4 years ago

@jdneo For me that is totally fine. And I prefer to accidentally release a jar that is missing a class file then releasing a jar that contains a file not meant to be released yet. If a project gets large it might be a hazzle to have to list all the class files. But I think people that have big project will relay on things like maven or graddle anyway. Also for any programmer with some basics skills it won't be hard to automate something to read a folder with the class files for example and print the strings that you can copy paste (most noob example I can think of). So yeah, keeping it simple is totally fine with me.

One important thing, you should not have to mention inner classes. Also it should also be possible to include other files like it already is now. This can be used to include some shader files for example that you can load using getClass().getResourceAsStream("/blur.glsl");.

clankill3r commented 4 years ago

From a user experience perspective, I think when using this:

Screen Shot 2020-08-14 at 22 55 08

Then the next window should show the already created configs for jar exports, with at the bottom something like: "create new jar export config", which will take you threw the steps of naming the config and selecting the main class etc.

jdneo commented 4 years ago

@CsCherrYY will recently look into this since he's the contributor of this feature.

CsCherrYY commented 4 years ago

@clankill3r Thanks for your follow and excellent idea of this feature!

I think it's good to have advanced settings of exporting a jar, including some properties like includes, excludes and manifest. This would let users have chance to custom a pattern to exclude some folders and class files, or to include some resource files from other folder.

In your example, excluding some folder makes sense to me. But I'm a little puzzled by including a .java file. Do you want to add the corresponding .class file or just want to add it as a resource?

clankill3r commented 4 years ago

In your example, excluding some folder makes sense to me. But I'm a little puzzled by including a .java file. Do you want to add the corresponding .class file or just want to add it as a resource?

I added the .java by accident, I changed the OP. There should however be an option to include the source files so "Go to Defenition" works.

CsCherrYY commented 3 years ago

In your example, excluding some folder makes sense to me. But I'm a little puzzled by including a .java file. Do you want to add the corresponding .class file or just want to add it as a resource?

I added the .java by accident, I changed the OP. There should however be an option to include the source files so "Go to Defenition" works.

Hi @clankill3r , I'm going to use the custom task to support the predefined settings of export jar. I would like to know that if property mainMethod could meet your requirement of property manifest in your example? Thank you.

clankill3r commented 3 years ago

@CsCherrYY Sorry, I don't understand the question.

jdneo commented 3 years ago

@clankill3r We want to know what kind of information you would like to specify in the customized manifest file. If we provide a field to let users specify the Main-Class, will it work in your case? Or there are other fields you would like to customize in the manifest file?

clankill3r commented 3 years ago

If we provide a field to let users specify the Main-Class, will it work in your case? Or there are other fields you would like to customize in the manifest file?

In certain cases I use things like this as well:

Premain-Class: imgui.IMGUI_Core$Widget_Agent
Agent-Class: imgui.IMGUI_Core$Widget_Agent
Can-Redefine-Classes: true
Can-Retransform-Classes: true

The things is, if you would support all those with special things in a json file then all you do is creating another chain that can potentially break. Also the amount of java programmers doing something with agent's for example is relative small.

Being able to set just the Main-Class will likely cover >95% of all cases. So my suggestion is to have two options where either one is used, one is specifying a Main-Class and two is a path to a manifest file. Having both options will allow 100% of the cases I assume.

Actually, now thinking about it, maybe it should always link to a manifest file, but that the first time it could ask for a Main-Class and creates a bare bones manifest file. That will be even more simple.

jdneo commented 3 years ago

Having both options will allow 100% of the cases I assume.

Agree.

maybe it should always link to a manifest file, but that the first time it could ask for a Main-Class and creates a bare bones manifest file.

Thank you for the suggestion. We will consider about it.

jdneo commented 3 years ago

Reopen this issue since #350 cannot unblock other customized usage.

jdneo commented 2 years ago

Close this thread since the most part of the request should have been resolved.

There is one remaining: allow user to customized the manifest or allow user to select one, which will be tracked by #526.

Thanks.