Java 7がインストールされているMac OS Xで現在のアプリケーションをテストしています。代わりに、OracleのJava 7を使用して、Java 6 from Apple。Java -version
のデフォルトのシステム出力は7
を表示しています。
さまざまなサイトで言及されていることのほとんどを試しましたが、この問題を修正できませんでした。
Java_HOME
も適切に設定されています。
Macはテスト目的でのみ使用しています。私は本当にこれに関するいくつかのガイダンスが必要です。
JRE 7を選択してEclipseで実行すると、正しく実行されます。したがって、アプリケーションに問題はありません。 Mac OS Xで何かが見つかりません。
My Javaシステム環境は次のようになります。
OS Xバージョン
10.8
/usr/libexec/Java_home -V
Matching Java Virtual Machines (3):
1.7.0_12, x86_64: "Java SE 7" /Library/Java/JavaVirtualMachines/jdk1.7.0_12.jdk
1.6.0_37-b06-434, x86_64: "Java SE 6" /System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Home
1.6.0_37-b06-434, i386: "Java SE 6" /System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Home
/Library/Java/JavaVirtualMachines/jdk1.7.0_12.jdk/Contents/Home
/usr/libexec/Java_home
/Library/Java/JavaVirtualMachines/jdk1.7.0_12.jdk/Contents/Home
echo $Java_HOME
/Library/Java/JavaVirtualMachines/jdk1.7.0_12.jdk/Contents/Home/
Java_Arch
が設定されていません
/Library/Internet\ Plug-Ins/JavaAppletPlugin.plugin/Contents/Home/bin/Java -version
Java version "1.7.0_12-ea"
ls /Library/Java/JavaVirtualMachines
jdk1.7.0_12.jdk
/System/Library/Frameworks/JavaVM.framework/Commands/Java -version
Java version "1.6.0_37"
私の現在のJDKは間違った何かを指していると思います。
Mac OS Xアプリケーションバンドルは、OracleのJava 7パッケージと互換性のないアプリバンドラーで作成されています。たとえば、Appleが提供するJar Bundler
は、AppleのJava 6システムパッケージでのみ機能します。
Appleは、Java 7以降の統合システムパッケージとしてJavaのサポートを断念しました。そのため、Oracle Java 7サードパーティパッケージとそのアプリケーションパッケージバンドルソリューションを選択する必要があります。これにより、Mac OS X 10.7.3以降でOracle Java 7ベースのアプリケーションバンドルを作成およびデプロイできます。
あなたが直面している根本的な技術的問題は、AppleのネイティブObjective-C
ベースのJavaAppLauncher
バイナリであり、Info.plist
で使用する形式はAppleのJava 6システムパッケージとOracleからのJavaAppLauncher
Info.plist
の組み合わせは、OracleのJava 7パッケージに対してのみ機能します。
AppleのJava 6システムパッケージをサポートするJavaAppLauncher
を使用しているため、常にApple Java 6システムパッケージがインストールされます。マック。
ビデオ があります。OracleのJavaプラットフォームのMac OS XポートのリードエンジニアであるScott Kovatchは、OracleのアプリバンドルについてJava 7は非常に詳細に機能しています。
Mac OS X 10.7.3以降に基づいてアプリバンドルを作成するには
以上では、Oracleのアプリバンドラーを使用する必要があります
Oracleのアプリバンドラーを使用すると、MacにインストールされているデフォルトのOracle Java 7パッケージを使用して、パッケージ化されたアプリを実行できます。
/Library/Internet Plug-Ins/JavaAppletPlugin.plugin/
または、パッケージ化されたアプリケーションでインライン化したOracle Java 7 JRE
MyJavaMacOSXApp.app/Contents/PlugIns/
注:両方のアプローチには長所と短所がありますが、バンドルされたアプリでApple App Storeにアクセスする場合は、独自のJREで最後の方法が必要です。
appbundler-1.0.jar
をダウンロードし、<project>/lib/appbundler-1.0.jar
に移動します次を<project>/build.xml
に追加します
<property environment="env" />
<taskdef
name="bundleapp"
classname="com.Oracle.appbundler.AppBundlerTask"
classpath="lib/appbundler-1.0.jar" />
<target name="bundle">
<bundleapp
outputdirectory="dist"
name="MyJavaMacOSXApp"
displayname="My Java Mac OS X App"
identifier="com.example.MyJavaMacOSXApp"
shortversion="1.0"
applicationCategory="public.app-category.developer-tools"
mainclassname="com.example.MyJavaMacOSXApp">
<runtime dir="${env.Java_HOME}" />
<classpath file="dist/MyJavaMacOSXApp.jar" />
</bundleapp>
</target>
注:MyJavaMacOSXApp
をアプリケーションデータに置き換える必要があります。 here いくつかの追加のAppBundlerTask
オプションを見つけることができます。この例では、最も単純な形式での動作方法のみを示しています。
ant bundle
でbundle
ターゲットを実行すると、MyJavaMacOSXApp.app
ディレクトリに<project>/dist
が見つかります。
<runtime dir="${env.Java_HOME}" />
要素とは何ですか?インライン化Oracle Java 7パッケージ(JRE)
上記のAntターゲットは、Oracle Java 7パッケージ(JRE)を
Java_HOME
に
MyJavaMacOSXApp.app/Contents/PlugIns
したがって、アプリケーションパッケージは完全に自己完結型であり、ターゲットシステムにOracle Java 7パッケージ(JRE)をインストールする必要はまったくありません。このようなデプロイされたMyJavaMacOSXApp.app
の次のスクリーンショットで見ることができるように:
デフォルトのOracle Java 7パッケージ(JRE)の配線
アプリケーションバンドルのターゲットMacにインストールされているデフォルトのOracle Java 7パッケージ(JRE)を使用する場合
/Library/Internet Plug-Ins/JavaAppletPlugin.plugin/
あなたは削除する必要があります
<runtime dir="${env.Java_HOME}" />
bundle
タスクの要素。このようなデプロイされたMyJavaMacOSXApp.app
の次のスクリーンショットで見ることができるように:
MyJavaMacOSXApp.Java
のソース
package com.example;
import Java.awt.*;
import javax.swing.*;
public class MyJavaMacOSXApp extends JPanel {
public MyJavaMacOSXApp() {
JLabel versionLabel = new JLabel("Java.version=" + System.getProperty("Java.version"));
JLabel homeLabel = new JLabel("Java.home=" + System.getProperty("Java.home"));
setLayout(new BorderLayout());
add(versionLabel, BorderLayout.PAGE_START);
add(homeLabel, BorderLayout.PAGE_END);
}
private static void createAndShowGUI() {
JFrame frame = new JFrame("MyJavaMacOSXApp");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
MyJavaMacOSXApp newContentPane = new MyJavaMacOSXApp();
newContentPane.setOpaque(true);
frame.setContentPane(newContentPane);
frame.pack();
frame.setVisible(true);
}
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
public void run() {
createAndShowGUI();
}
});
}
}
必要なだけ<classpath file="dist/additional.jar" />
エントリを追加してください。
注:バンドルタスクの要素の順序は、バンドルされたアプリの実行時に保持されません。 Java.class.path
は、*.jar
ディレクトリからMyJavaMacOSXApp.app/Contents/Java
sを読み取るときに、ネイティブのJavaAppLauncher
によって実行時に構築されます。
完全を期すために、これはInfo.plist
がどのように見えるかです:
<?xml version="1.0" ?>
<!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>JavaAppLauncher</string>
<key>CFBundleIconFile</key>
<string>GenericApp.icns</string>
<key>CFBundleIdentifier</key>
<string>com.example.MyJavaMacOSXApp</string>
<key>CFBundleDisplayName</key>
<string>My Java Mac OS X App</string>
<key>CFBundleInfoDictionaryVersion</key>
<string>6.0</string>
<key>CFBundleName</key>
<string>MyJavaMacOSXApp</string>
<key>CFBundlePackageType</key>
<string>APPL</string>
<key>CFBundleShortVersionString</key>
<string>1.0</string>
<key>CFBundleSignature</key>
<string>????</string>
<key>CFBundleVersion</key>
<string>1</string>
<key>NSHumanReadableCopyright</key>
<string></string>
<key>LSApplicationCategoryType</key>
<string>public.app-category.developer-tools</string>
<key>JVMRuntime</key>
<string>jdk1.7.0_17.jdk</string>
<key>JVMMainClassName</key>
<string>com.example.MyJavaMacOSXApp</string>
<key>JVMOptions</key>
<array>
</array>
<key>JVMArguments</key>
<array>
</array>
</dict>
</plist>
この回答が基づいている重要な文書:
また、多くの機能とバグ修正を備えた、よく管理されたappbundlerのフォークもあります。
Javaバージョンは、アプリケーションのメタデータで指定されている可能性が高い。アプリを右クリックしてパッケージの内容を表示を選択し、Info.plist
ファイルには、アプリケーションが使用するJVMを定義するエントリがあります。例えば。
<key>JVMVersion</key>
<string>1.5</string>
OSXは、アプリケーションが要求した場合、より低いJVMを使用することを選択する場合があります。
あなたのシステムは本当に最新ではありません。これがあなたの問題を引き起こしているとは言っていません。しかし、安全を期すために、私は最新かつ最高の役割を果たします。
Sudo rm -rf /Library/Java/JavaVirtualMachines/jdk1.7.0_12.jdk
。注:次のステップでは、現在のOracle JDK 1.7.0_17をインストールしているため、安全です。上記のすべての手順を完了した後、次の出力を再度作成してください。
/usr/libexec/Java_home -V
でる?/usr/libexec/Java_home
でる?echo $Java_HOME
でる?echo $Java_Arch
でる?/Library/Internet\ Plug-Ins/JavaAppletPlugin.plugin/Contents/Home/bin/Java -version
でる?ls /Library/Java/JavaVirtualMachines
でる?/System/Library/Frameworks/JavaVM.framework/Commands/Java -version
でる?元の質問で行った手順と努力を文書化するだけです。それはあなたの進歩を反映しています。
UPDATE:解決策は、OracleでMac OS Xアプリケーションバンドルを作成することです AppBundlerTask
。詳細については、他の回答を参照してください: https://stackoverflow.com/a/15271448
これをインストールしてみてください:
http://support.Apple.com/kb/dl1572
InteliJは正常に動作しますが、私はまだJava SE 7などのNetBeansを使用しています。
Java -version
Java version "1.7.0_51"
Java(TM) SE Runtime Environment (build 1.7.0_51-b13)
Java HotSpot(TM) 64-Bit Server VM (build 24.51-b03, mixed mode)
編集:Uweの印象的な答えは、AppLauncherを使用していたことが判明したOPにとって絶対に正しいです。私の最初の質問は、OSXでのコマンドラインの問題に関連するもので、Java 6 vs Java 7. Thecomments元の質問では、私は間違っていましたが、コマンドラインの問題がある人は誰でも、以下の方が簡単な解決策を見つけるかもしれません。
元:私の状況は、OPが持っていたと思ったのと同じように見えました:Java 1.7コマンドラインでは完全に1.7ですが、mvn
は失敗し、1.6について文句を言いました。 sbt
とIntelliJを使用して、サードパーティのプロジェクトをmvn
でコンパイルする際に問題が発生し始めました。
私はこれがうまく機能し、はるかに簡単であることがわかりました:
http://www.jayway.com/2013/03/08/configuring-maven-to-use-Java-7-on-mac-os-x/
そのために必要なのは、.profile内の次のものだけです。
export Java_HOME=`/usr/libexec/Java_home -v 1.7`
その変数を設定すると、mvn
はうまく機能しました。