OSDN Git Service

Macの起動時のjvm_options設定で現在のバンドルのパスを示す$APP_ROOTをサポート
authorseraphy <seraphy@users.osdn.me>
Mon, 14 Jan 2019 06:48:19 +0000 (15:48 +0900)
committerseraphy <seraphy@users.osdn.me>
Mon, 14 Jan 2019 06:48:19 +0000 (15:48 +0900)
pom.xml
src/JavaLaunch/JavaLaunch/main.m
src/main/attachment/bundle/CharacterManaJ.app/Contents/Characters/appConfig.xml [new file with mode: 0644]
src/main/attachment/bundle/CharacterManaJ.app/Contents/Info.plist
src/main/attachment/bundle/CharacterManaJ.app/Contents/MacOS/JavaLaunch

diff --git a/pom.xml b/pom.xml
index 2e98869..24231ec 100644 (file)
--- a/pom.xml
+++ b/pom.xml
                                                                                                <include name="README_mac.txt"/>
                                                                                        </fileset>
                                                                                </copy>
+                                                                               <chmod dir="${project.build.directory}/appbundle/CharacterManaJ.app/Contents/Characters"
+                                                                                       perm="g+srw" type="dir"/>
+                                                                               <chmod dir="${project.build.directory}/appbundle/CharacterManaJ.app/Contents/Characters"
+                                                                                       perm="g+rw" includes="**/*" type="file"/>
 
                                                                                <delete file="${project.build.directory}/${project.artifactId}_${project.version}.dmg"/>
                                                                                <exec executable="hdiutil">
index b54a49a..4734c3c 100644 (file)
@@ -12,6 +12,8 @@
 #define JAVA_LAUNCH_ERROR "JavaLaunchError"
 #define UNSPECIFIED_ERROR "An unknown error occurred."
 
+#define APP_ROOT_PREFIX "$APP_ROOT"
+
 NSString *FindJavaHome() {
     NSTask *task = [[NSTask alloc] init];
     NSPipe *pipe  = [NSPipe pipe];
@@ -87,18 +89,20 @@ int main(int argc, const char * argv[]) {
             NSLog(@"displayAppName=%@", displayAppName);
             printf("%s\n", [displayAppName UTF8String]);
             
-            //
-            NSMutableArray *jvmOptions = [[[mainBundle infoDictionary] objectForKey:@"JVMOptions"] mutableCopy];
-            if (jvmOptions == nil) {
-                jvmOptions = [NSMutableArray array];
+            // JVMオプションの取得
+            NSMutableArray *jvmOptions = [NSMutableArray array];
+            NSArray *jvmOptionsFixed = [[mainBundle infoDictionary] objectForKey:@"JVMOptions"];
+            if (jvmOptionsFixed != nil) {
+                for (NSString *option in jvmOptionsFixed) {
+                    NSString *jvmOption = [option stringByReplacingOccurrencesOfString:@APP_ROOT_PREFIX withString:[mainBundle bundlePath]]; // $APP_ROOTという文字列をバンドルパスに置換する
+                    [jvmOptions addObject: jvmOption];
+                }
             }
-            
-            // バンドル名
-            NSString *bundleName = [[mainBundle infoDictionary] objectForKey:@"CFBundleName"];
-            NSLog(@"bundleName=%@", bundleName);
-            
+
             // ユーザー定義オプションの読み込み
+            NSString *bundleName = [[mainBundle infoDictionary] objectForKey:@"CFBundleName"];
             NSString *userJvmOptionPath = [NSHomeDirectory() stringByAppendingPathComponent: [NSString stringWithFormat:@"/Library/%@/jvm_options", bundleName]];
+            NSLog(@"use define jvmoptions path=%@", userJvmOptionPath);
             if ([fileManager fileExistsAtPath: userJvmOptionPath]) {
                 NSString* fileContents = [NSString stringWithContentsOfFile:userJvmOptionPath
                                                                    encoding:NSUTF8StringEncoding error:nil];
@@ -108,7 +112,8 @@ int main(int argc, const char * argv[]) {
                 for (id line in allLinedStrings) {
                     NSString *option = [line stringByTrimmingCharactersInSet: [NSCharacterSet whitespaceAndNewlineCharacterSet]];
                     if (![option hasPrefix:@"#"] && [option length] > 0) {
-                        NSLog(@"option: %@", line);
+                        option = [option stringByReplacingOccurrencesOfString:@APP_ROOT_PREFIX withString:[mainBundle bundlePath]];
+                        NSLog(@"option: %@", option);
                         [jvmOptions addObject: option];
                     }
                 }
diff --git a/src/main/attachment/bundle/CharacterManaJ.app/Contents/Characters/appConfig.xml b/src/main/attachment/bundle/CharacterManaJ.app/Contents/Characters/appConfig.xml
new file mode 100644 (file)
index 0000000..90bfeef
--- /dev/null
@@ -0,0 +1,3 @@
+<!DOCTYPE properties SYSTEM "http://java.sun.com/dtd/properties.dtd">
+<properties version="1.0">
+</properties>
index e174d0b..8383e19 100644 (file)
@@ -1,36 +1,44 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
 <plist version="1.0">
-  <dict>
-    <key>CFBundleDevelopmentRegion</key>
-    <string>English</string>
-    <key>CFBundleExecutable</key>
-    <string>JavaLaunch</string>
-    <key>CFBundleIconFile</key>
-    <string>icon.icns</string>
-    <key>CFBundleIdentifier</key>
-    <string>charactermanaj.CharacterManaJ</string>
-    <key>CFBundleDisplayName</key>
-    <string>CharacterManaJ</string>
-    <key>CFBundleInfoDictionaryVersion</key>
-    <string>6.0</string>
-    <key>CFBundleName</key>
-    <string>CharacterManaJ</string>
-    <key>CFBundlePackageType</key>
-    <string>APPL</string>
-    <key>CFBundleSignature</key>
-    <string>????</string>
-    <key>CFBundleVersion</key>
-    <string>@BundleVersion@</string>
-    <key>CFBundleShortVersionString</key>
-    <string>@BundleShortVersionString@</string>
-    <key>NSHumanReadableCopyright</key>
-    <string>@NSHumanReadableCopyright@</string>
-    <key>NSHighResolutionCapable</key>
-    <true/>
-    <key>NSSupportsAutomaticGraphicsSwitching</key>
-    <true/>
-    <key>ExecutableJar</key>
-    <string>Resources/CharacterManaJ.jar</string>
-  </dict>
+<dict>
+       <key>CFBundleDevelopmentRegion</key>
+       <string>English</string>
+       <key>CFBundleExecutable</key>
+       <string>JavaLaunch</string>
+       <key>CFBundleIconFile</key>
+       <string>icon.icns</string>
+       <key>CFBundleIdentifier</key>
+       <string>charactermanaj.CharacterManaJ</string>
+       <key>CFBundleDisplayName</key>
+       <string>CharacterManaJ</string>
+       <key>CFBundleInfoDictionaryVersion</key>
+       <string>6.0</string>
+       <key>CFBundleName</key>
+       <string>CharacterManaJ</string>
+       <key>CFBundlePackageType</key>
+       <string>APPL</string>
+       <key>CFBundleSignature</key>
+       <string>????</string>
+       <key>CFBundleVersion</key>
+       <string>@BundleVersion@</string>
+       <key>CFBundleShortVersionString</key>
+       <string>@BundleShortVersionString@</string>
+       <key>NSHumanReadableCopyright</key>
+       <string>@NSHumanReadableCopyright@</string>
+       <key>NSHighResolutionCapable</key>
+       <true/>
+       <key>NSSupportsAutomaticGraphicsSwitching</key>
+       <true/>
+       <key>JVMOptions</key>
+       <array>
+               <!--
+               アプリケーションバンドルとデータをセットで配備する場合は以下のように設定する
+               <string>-DcharactersDir=$APP_ROOT/Contents/Characters</string>
+               <string>-DappConfigFile=$APP_ROOT/Contents/Characters/appConfig.xml</string>
+               -->
+       </array>
+       <key>ExecutableJar</key>
+       <string>Resources/CharacterManaJ.jar</string>
+</dict>
 </plist>
index 6d21435..04967cd 100755 (executable)
Binary files a/src/main/attachment/bundle/CharacterManaJ.app/Contents/MacOS/JavaLaunch and b/src/main/attachment/bundle/CharacterManaJ.app/Contents/MacOS/JavaLaunch differ