ディレクトリ構造はMavenの標準構造であると仮定します。
次のようにコードをコピーします。
-src
-ターゲット
-test.jar (更新する必要がある jar パッケージ)
次のようにコードをコピーします。
パッケージ com.foo.common.base.utils.development;
静的 org.junit.Assert.* をインポートします。
java.io.ファイルをインポートします。
インポート java.io.IOException;
java.util.Dateをインポートします。
java.util.Propertiesをインポートします。
org.apache.commons.io.FileUtils をインポートします。
org.junit.Test をインポートします。
org.slf4j.Logger をインポートします。
org.slf4j.LoggerFactory をインポートします。
org.springframework.core.io.ClassPathResource をインポートします。
パブリック クラス JarUpdater {
public static Final Logger ロガー = LoggerFactory
.getLogger(JarUpdater.class);
@テスト
/**
* com ディレクトリ内のすべてのファイルを、jar の対応するディレクトリ構造に更新します。
*
* コードの更新が成功すると、jar のサイズが異なると主張します
*/
public void updateClass() は IOException、InterruptedException をスローします {
ClassPathResource myPath = new ClassPathResource(
"jarUpdaterConfig.properties");
プロパティ p = new Properties();
p.load(myPath.getInputStream());
ClassUpdater classUpdater = new ClassUpdater().applySettings(p);
classUpdater.compileAndCopyClass();
String workingDirectory = p.getProperty("workingDirectory");
String jar4UpdateName = p.getProperty("jar4UpdateName");
// クラスのコンパイルパス
文字列 updateSourcePath = workingDirectory + "ターゲット";
// クラスのルートフォルダー
文字列 updateSourceDir = "com";
日付 startDate = 新しい Date();
ファイル myJar = 新しいファイル(作業ディレクトリ + jar4UpdateName);
if (!myJar.isFile()) {
logger.error("次のパス {} を持つファイルは存在しません。",
jar4UpdateName);
戻る;
}
長いoldLength = myJar.length();
logger.info("名前:{}、サイズ:{} の jar ファイルを更新する準備ができました",
myJar.getName()、myJar.length());
文字列 myCommand = "jar uf " + workingDirectory + jar4UpdateName
+ " -C " + updateSourcePath + " " + updateSourceDir;
logger.info("更新コマンド【{}】", myCommand);
Runtime.getRuntime().exec(myCommand);
while (!FileUtils.isFileNewer(myJar, startDate)) {
logger.info("2 秒間スリープして、変更を確認しています...");
Thread.sleep(2000);
}
assertNotEquals(
"jar が正常に更新されていない可能性があります。コードを確認してください。",
oldLength、myJar.length());
logger.info("サイズ:{} の jar ファイルの更新を終了します", myJar.length());
}
}