3

Dropbox を使用して 3 台の異なるマシン間で Eclipse プロジェクトを共有しています。問題は、.classpath ファイル内のパスがすべてのマシンで同じではないことです。に置き換えようとしまし/Users/username~が、うまくいきません。ただし、そのファイルは別のマシンで Dropbox によって同期されるため、問題が発生します。

プロジェクトごとにその .classpath ファイルの名前やパスを構成する方法はありますか?

PS: これはバージョン管理に関するものではありません。このプロジェクトでそれを知っていて使用していますが、バージョン管理なしで機能するソリューションが必要です。

ディレクトリ構造は次のとおりです。

  • .metadata (同期から除外)
  • src (バージョン管理)
    • .classpath
    • 私の他のファイル

.classpath ファイルは、sbt eclipse コマンドによって生成されます。現在、次のようになっています。

<?xml version="1.0" encoding="UTF-8"?>
<classpath>
    <classpathentry kind="src" output="target/scala-2.10/classes" path="src/main/scala"/>
    <classpathentry kind="src" output="target/scala-2.10/classes" path="src/main/java"/>
    <classpathentry kind="src" output="target/scala-2.10/test-classes" path="src/test/scala"/>
    <classpathentry kind="src" output="target/scala-2.10/test-classes" path="src/test/java"/>
    <classpathentry kind="con" path="org.scala-ide.sdt.launching.SCALA_CONTAINER"/>
    <classpathentry kind="lib" path="/Users/USERNAME/.ivy2/cache/com.typesafe.akka/akka-actor_2.10/bundles/akka-actor_2.10-2.1.0.jar" sourcepath="/Users/USERNAME/.ivy2/cache/com.typesafe.akka/akka-actor_2.10/srcs/akka-actor_2.10-2.1.0-sources.jar"/>
    <classpathentry kind="lib" path="/Users/USERNAME/.ivy2/cache/com.typesafe/config/bundles/config-1.0.0.jar" sourcepath="/Users/USERNAME/.ivy2/cache/com.typesafe/config/srcs/config-1.0.0-sources.jar"/>
    <classpathentry kind="lib" path="/Users/USERNAME/.ivy2/cache/com.typesafe.akka/akka-remote_2.10/bundles/akka-remote_2.10-2.1.0.jar" sourcepath="/Users/USERNAME/.ivy2/cache/com.typesafe.akka/akka-remote_2.10/srcs/akka-remote_2.10-2.1.0-sources.jar"/>
    <classpathentry kind="lib" path="/Users/USERNAME/.ivy2/cache/io.netty/netty/bundles/netty-3.5.8.Final.jar" sourcepath="/Users/USERNAME/.ivy2/cache/io.netty/netty/srcs/netty-3.5.8.Final-sources.jar"/>
    <classpathentry kind="lib" path="/Users/USERNAME/.ivy2/cache/com.google.protobuf/protobuf-java/jars/protobuf-java-2.4.1.jar" sourcepath="/Users/USERNAME/.ivy2/cache/com.google.protobuf/protobuf-java/srcs/protobuf-java-2.4.1-sources.jar"/>
    <classpathentry kind="lib" path="/Users/USERNAME/.ivy2/cache/org.uncommons.maths/uncommons-maths/jars/uncommons-maths-1.2.2a.jar" sourcepath="/Users/USERNAME/.ivy2/cache/org.uncommons.maths/uncommons-maths/srcs/uncommons-maths-1.2.2a-sources.jar"/>
    <classpathentry kind="lib" path="/Users/USERNAME/.ivy2/cache/com.esotericsoftware.kryo/kryo/jars/kryo-2.20.jar" sourcepath="/Users/USERNAME/.ivy2/cache/com.esotericsoftware.kryo/kryo/srcs/kryo-2.20-sources.jar"/>
    <classpathentry kind="lib" path="/Users/USERNAME/.ivy2/cache/com.esotericsoftware.reflectasm/reflectasm/jars/reflectasm-1.07-shaded.jar" sourcepath="/Users/USERNAME/.ivy2/cache/com.esotericsoftware.reflectasm/reflectasm/srcs/reflectasm-1.07-sources.jar"/>
    <classpathentry kind="lib" path="/Users/USERNAME/.ivy2/cache/org.ow2.asm/asm/jars/asm-4.0.jar" sourcepath="/Users/USERNAME/.ivy2/cache/org.ow2.asm/asm/srcs/asm-4.0-sources.jar"/>
    <classpathentry kind="lib" path="/Users/USERNAME/.ivy2/cache/com.esotericsoftware.minlog/minlog/jars/minlog-1.2.jar" sourcepath="/Users/USERNAME/.ivy2/cache/com.esotericsoftware.minlog/minlog/srcs/minlog-1.2-sources.jar"/>
    <classpathentry kind="lib" path="/Users/USERNAME/.ivy2/cache/org.objenesis/objenesis/jars/objenesis-1.2.jar" sourcepath="/Users/USERNAME/.ivy2/cache/org.objenesis/objenesis/srcs/objenesis-1.2-sources.jar"/>
    <classpathentry kind="lib" path="/Users/USERNAME/.ivy2/cache/ch.ethz.ganymed/ganymed-ssh2/jars/ganymed-ssh2-build210.jar" sourcepath="/Users/USERNAME/.ivy2/cache/ch.ethz.ganymed/ganymed-ssh2/srcs/ganymed-ssh2-build210-sources.jar"/>
    <classpathentry kind="lib" path="/Users/USERNAME/.ivy2/cache/commons-codec/commons-codec/jars/commons-codec-1.7.jar" sourcepath="/Users/USERNAME/.ivy2/cache/commons-codec/commons-codec/srcs/commons-codec-1.7-sources.jar"/>
    <classpathentry kind="lib" path="/Users/USERNAME/.ivy2/cache/junit/junit/jars/junit-4.8.2.jar" sourcepath="/Users/USERNAME/.ivy2/cache/junit/junit/srcs/junit-4.8.2-sources.jar"/>
    <classpathentry kind="lib" path="/Users/USERNAME/.ivy2/cache/org.specs2/specs2_2.10/jars/specs2_2.10-1.13.jar" sourcepath="/Users/USERNAME/.ivy2/cache/org.specs2/specs2_2.10/srcs/specs2_2.10-1.13-sources.jar"/>
    <classpathentry kind="lib" path="/Users/USERNAME/.ivy2/cache/org.specs2/scalaz-core_2.10/jars/scalaz-core_2.10-7.0.0.jar" sourcepath="/Users/USERNAME/.ivy2/cache/org.specs2/scalaz-core_2.10/srcs/scalaz-core_2.10-7.0.0-sources.jar"/>
    <classpathentry kind="lib" path="/Users/USERNAME/.ivy2/cache/org.specs2/scalaz-concurrent_2.10/jars/scalaz-concurrent_2.10-7.0.0.jar" sourcepath="/Users/USERNAME/.ivy2/cache/org.specs2/scalaz-concurrent_2.10/srcs/scalaz-concurrent_2.10-7.0.0-sources.jar"/>
    <classpathentry kind="lib" path="/Users/USERNAME/.ivy2/cache/org.specs2/scalaz-effect_2.10/jars/scalaz-effect_2.10-7.0.0.jar" sourcepath="/Users/USERNAME/.ivy2/cache/org.specs2/scalaz-effect_2.10/srcs/scalaz-effect_2.10-7.0.0-sources.jar"/>
    <classpathentry kind="lib" path="/Users/USERNAME/.ivy2/cache/org.specs2/classycle/jars/classycle-1.4.1.jar" sourcepath="/Users/USERNAME/.ivy2/cache/org.specs2/classycle/srcs/classycle-1.4.1-sources.jar"/>
    <classpathentry kind="lib" path="/Users/USERNAME/.ivy2/cache/org.mockito/mockito-all/jars/mockito-all-1.9.0.jar" sourcepath="/Users/USERNAME/.ivy2/cache/org.mockito/mockito-all/srcs/mockito-all-1.9.0-sources.jar"/>
    <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
    <classpathentry kind="lib" path="/Users/USERNAME/Downloads/Java-WebSocket-master/dist/java_websocket.jar"/>
    <classpathentry kind="output" path="bin"/>
</classpath>
4

5 に答える 5

1

私は sbteclipse には詳しくありませんが、彼らのwiki ページによると、実行sbt eclipseすると .classpath ファイルが生成されます。実行している方法では、依存ライブラリの絶対パスが生成されますが、これは望ましくありません。

relativizeLibsそれが問題のように見えるという設定があります。それをに設定する必要がtrueあります(これは明らかにデフォルト値です)。その場合、各コンピューターのプロジェクトとライブラリ ファイルに対して同じ相対位置から実行する必要がある可能性がありますsbt eclipseが、開発マシン間でその構造を一貫させることができるはずです。

于 2013-02-04T16:22:08.520 に答える
1

これまでのところ実際に機能しているように見える最初の解決策は、少し見苦しいですが、非常に簡単です。ディレクトリにシンボリック リンクを作成して、/Users/Eclipse が必要なファイルを見つけられるようにしました。

cd /Users/
sudo ln -s USERNAME-ON-THE-CURRENT-MACHINE/ USERNAME-IN-THE-PATH-OF-THE-CLASSPATH-FILE

そうすれば、異なるマシン間でコードを簡単に共有できます。

バージョン管理に関する注意: はい、バージョン管理を使用しています。実際、私たちは大学のプロジェクトの Github フォークに取り組んでおり、多くのプル リクエスト、ブランチ、および複数の開発者がいます。したがって、Dropbox ソリューションは SCM の代わりにはなりません。ただし、異なるコンピューター間ですばやく変更する際に非常に柔軟であり、ファイルを最新の状態に保つためだけにブランチやコミットなどを処理する必要がありません。もちろん、すべての変更は、準備ができたら Github にコミットされます。

于 2013-02-05T10:34:19.347 に答える
0

ドロップボックスからバイナリフォルダを削除できます。ドロップボックスが同期するたびにコードが上書きされるだけで、Eclipseを再度ビルドする必要があり、問題を解決する必要があります。

于 2013-02-02T15:08:56.687 に答える
0

ファイルの名前を変更する方法はありません。これは.classpath、Eclipse が機能するためにハードコーディングする必要がある数少ないものの 1 つです (これは、.project ファイルとともに、Java プロジェクトを管理するためのブートストラップです。Eclipse JDT にはそれらのファイルがどこにあるかを本質的に「知る」ため)。

私は sbt について何も知りませんが、一般に、Eclipse Java プロジェクトには.classpathクリーンな (絶対パスまたはマシン固有のパスから解放された) 状態を保つための機能/テクニックがいくつかあります。典型的な Java プロジェクトでは、ユーザーはビルド パス プロパティを介してプロジェクトに変更を加え.classpathます。sbt はそのファイルを定期的に再生成しますか? あなたの内容を投稿できます.classpathか?

于 2013-02-04T15:37:07.193 に答える
-1

すでに質問に答えているので、おそらくこれを行うつもりはありませんが...本当にすべきではありません:

  • チェックイン.project.classpathファイル
  • SCM を使用する代わりに、異なるコンピューター間でプロジェクト ファイルを共有します (特に Git を使用しているため)。

Ivy 、GradleSBT、およびMavenにはすべて、管理および. これらのオプションを調査する必要があります。また、Eclipse には Maven と Ivy の両方のプラグイン ( http://ant.apache.org/ivy/ivyde/ ) があり、Ivy と Maven ファイルに基づいてクラスパスを自動的に管理します。.classpath.project

他の多くのプロジェクトに取り組んでいる開発者として、誰かがチェックイン.projectして.classpath. .class異なるマシン (および.project、 )間で出力ファイルを共有する.classpathことも危険です。これは、Eclipse が Java ファイルを部分的にコンパイルすることは言うまでもなく、Eclipse のバージョンと JDK コンパイラが異なる可能性があるためです。今はうまくいくかもしれませんが、ハックです。

また、コメントで指摘したように、アイビーの依存関係を再フェッチすることを覚えておくか、それらを同期に含める必要があります(つまり、.ivy2絶対に大規模になる可能性のあるディレクトリ)。アイビーの依存関係を再フェッチすることを忘れないでくださいあなたを再生成しないようにするには.classpath(SBTが完全に欠けていない限り)?

于 2013-02-06T00:26:49.327 に答える