0

私のJavaアプリケーションでは、jarファイル(Mavenシェードプラグインにパッケージ化されている)をバイトストリームに読み込みます。jarには、で定義されたエントリポイントクラスがあります。POM.xml

<build>
  ...
  <plugins>
    ...
    <plugin>
      <groupId>org.apache.maven.plugins</groupId>
      <artifactId>maven-jar-plugin</artifactId>
      <configuration>
        <archive>
          <manifest>
            <mainClass>com.mycompany.TheEntryPoint</mainClass>
          </manifest>
        </archive>
      </configuration>
    </plugin>
  </plugins>
</build>

そのようなクラスをJavaアプリに動的にロードするにはどうすればよいですか?

アップデート:

  • jarはバイトストリームとしてロードされ、ファイルシステムまたはURLに存在しません
4

1 に答える 1

3

これを行う最も簡単な方法はURLClassLoader、バイトストリームから最初からこれを実行しようとする代わりに、を使用することです。いつでも.jarを一時ファイルに書き込んで、そのURLを作成できます。

コードは次のようになります。

URLClassLoader loader = new URLClassLoader(
    new URL[] {new URL("file://...")},
    Thread.currentThread().getContextClassLoader());

loader.loadClass("com.mycompany.TheEntryPoint");

を使用して、メインクラス名を自動的に検出(または呼び出す)することもできますJarURLConnection。(Oracleには、このクラスの使用に関するチュートリアルもあります。)

于 2012-11-22T00:28:33.963 に答える