Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Some exporting jar suggestions #298

Closed
clankill3r opened this issue Aug 13, 2020 · 14 comments · Fixed by #350
Closed

Some exporting jar suggestions #298

clankill3r opened this issue Aug 13, 2020 · 14 comments · Fixed by #350
Assignees
Labels
enhancement New feature or request

Comments

@clankill3r
Copy link

clankill3r commented Aug 13, 2020

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
Copy link
Member

jdneo commented Aug 14, 2020

@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?

@jdneo jdneo added the enhancement New feature or request label Aug 14, 2020
@clankill3r
Copy link
Author

@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
Copy link
Author

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
Copy link
Member

jdneo commented Aug 21, 2020

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

@CsCherrYY
Copy link
Contributor

@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
Copy link
Author

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
Copy link
Contributor

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
Copy link
Author

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

@jdneo
Copy link
Member

jdneo commented Sep 25, 2020

@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
Copy link
Author

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
Copy link
Member

jdneo commented Sep 27, 2020

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.

@CsCherrYY CsCherrYY linked a pull request Oct 22, 2020 that will close this issue
@jdneo
Copy link
Member

jdneo commented Nov 16, 2020

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

@jdneo
Copy link
Member

jdneo commented Dec 1, 2021

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.

@jdneo jdneo closed this as completed Dec 1, 2021
@JotaRata
Copy link

The suggested method of using

!{compileOutput}/packageName does not work for me, I am using Maven for dependency management.

How is that feature supposed to be used?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
enhancement New feature or request
Projects
None yet
Development

Successfully merging a pull request may close this issue.

4 participants