{"id":4657,"date":"2020-05-01T23:32:47","date_gmt":"2020-05-02T06:32:47","guid":{"rendered":"http:\/\/blackcap.name\/blog\/new\/?p=4657"},"modified":"2020-05-02T11:00:27","modified_gmt":"2020-05-02T18:00:27","slug":"i-think-im-starting-to-see-a-pattern-here","status":"publish","type":"post","link":"https:\/\/blackcap.name\/blog\/new\/?p=4657","title":{"rendered":"I Think I&#8217;m Starting to See a Pattern Here\u2026"},"content":{"rendered":"<p>I&#8217;m trying to package a Java program I wrote so it makes a nice, professional-looking &#8220;clickable&#8221; app, complete with a custom icon.<\/p>\n<p>First up was the Mac. The Oracle-furnished packaging tools were buggy and did not exactly work as documented, but I finally managed to make a (crappy) package from them.<\/p>\n<p>Then came Linux. At first I was at a loss as to what to do, then I decided to crib the package bundler that the <a href=\"http:\/\/www.jedit.org\/\">jEdit<\/a> build files used. It was a huge struggle, because it was your typical open-source project, almost completely undocumented. Eventually I managed to get it to limp along to completion and make a (nonworking) Debian package.<\/p>\n<p>A day of struggle followed, trying to make the nonworking package work. Eventually I gave up on the bundler and decided to make a Debian package completely from scratch. That was surprisingly easy compared to the crap software I had been fighting with.<\/p>\n<p>Then back to the Mac. Would the bundler that the jEdit team used do any better a job than the stock one shipped with the JDK? No, it would not. So I looked into what made a Mac application bundle tick, and it <a href=\"https:\/\/developer.apple.com\/library\/archive\/documentation\/CoreFoundation\/Conceptual\/CFBundles\/BundleTypes\/BundleTypes.html\">wasn&#8217;t that complex<\/a>. The biggest hurdles were (a) finding the magic keyword to search on (&#8220;bundle&#8221; in this case), and creating an <code>Info.plist<\/code> file (doable once I located the <a href=\"https:\/\/developer.apple.com\/library\/archive\/documentation\/General\/Reference\/InfoPlistKeyReference\/Articles\/AboutInformationPropertyListFiles.html\">documentation<\/a> for them).<\/p>\n<p>So I built that one totally from scratch, too. So now I&#8217;m two for two at it being <em>less<\/em> work to &#8220;re-invent the wheel&#8221; than it is to use an existing, off-the-shelf solution.<\/p>\n<p>Next up: Windows. Just for yucks, I&#8217;ll give <a href=\"http:\/\/launch4j.sourceforge.net\/\">Launch4j<\/a> a whirl, though based on my recent experiences, I don&#8217;t expect it to work, and I&#8217;m not planning on investing much time in trying to make it work, either. Who knows, maybe I&#8217;ll get pleasantly surprised. (Then again, probably not.)<\/p>\n<p><strong>Update:<\/strong> Well, I&#8217;ll be. Launch4j actually proved to be a time-saver. The most obnoxious thing about it is a bizarre insistence on four-part version numbers, but it turns out that&#8217;s a Windows thing (and it is documented), so it&#8217;s not the Launch4j team&#8217;s fault.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>I&#8217;m trying to package a Java program I wrote so it makes a nice, professional-looking &#8220;clickable&#8221; app, complete with a custom icon. First up was the Mac. The Oracle-furnished packaging tools were buggy and did not exactly work as documented, but I finally managed to make a (crappy) package from them. Then came Linux. At [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[7],"tags":[],"class_list":["post-4657","post","type-post","status-publish","format-standard","hentry","category-computers"],"_links":{"self":[{"href":"https:\/\/blackcap.name\/blog\/new\/index.php?rest_route=\/wp\/v2\/posts\/4657","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/blackcap.name\/blog\/new\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blackcap.name\/blog\/new\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blackcap.name\/blog\/new\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/blackcap.name\/blog\/new\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=4657"}],"version-history":[{"count":0,"href":"https:\/\/blackcap.name\/blog\/new\/index.php?rest_route=\/wp\/v2\/posts\/4657\/revisions"}],"wp:attachment":[{"href":"https:\/\/blackcap.name\/blog\/new\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=4657"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blackcap.name\/blog\/new\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=4657"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blackcap.name\/blog\/new\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=4657"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}