zip ファイルに保存されているシンボリック リンクがあります。
Mac OS システムを使用してそのファイルを解凍すると、シンボリック リンクが維持されます (つまり、それらはシンボリック リンクであり、そのように表示されます)。
しかし、maven (特にunpack-dependencies mojo) を使用してそれらを解凍すると、単純なファイルとして表示されます。
それで、そのフラグを保持するmavenプラグインはありますか?
zip ファイルに保存されているシンボリック リンクがあります。
Mac OS システムを使用してそのファイルを解凍すると、シンボリック リンクが維持されます (つまり、それらはシンボリック リンクであり、そのように表示されます)。
しかし、maven (特にunpack-dependencies mojo) を使用してそれらを解凍すると、単純なファイルとして表示されます。
それで、そのフラグを保持するmavenプラグインはありますか?
truezip-maven-pluginを試してみることをお勧めします。
シンボリック リンクは、すべての OS に実装されているわけではありません。実際のところ、javadocsを見た後、SDK がこの種の zip エントリをまったくサポートしているとは思えません。私が知る限り、それは単なるファイルとディレクトリです。その原因により、依存関係プラグインの制限でもあるとは言えません。
他の回答によると、シンボリックリンクの解凍を可能にする純粋な Java ライブラリはほとんどないようです。
このようなソリューションでは、純粋なマルチプラットフォーム ビルドを実現するために、OS ごとに単純にモジュールを作成することはありません。これは、従来のモジュールの軍拡競争につながり、より実用的には、このモジュールのライフサイクルに適合しないためです。
結果として、私は古典的な Maven スクリプト ソリューションを使用しました: GMaven !
このあまり美しくないスクリプトにつながった
<plugin>
<groupId>org.codehaus.gmaven</groupId>
<artifactId>gmaven-plugin</artifactId>
<executions>
<execution>
<id>unzip native code using Groovy</id>
<phase>prepare-package</phase>
<goals>
<goal>execute</goal>
</goals>
<configuration>
<providerSelection>${gmaven.provider.version}</providerSelection>
<source>
<![CDATA[
def ant = new AntBuilder()
def FOLDERS_TO_EXPLORE = [] /* put here the list of folders in which zip files will be recursively searched */
def unzip(File file) {
def RUN_ON_WINDOWS = System.getProperty("os.name").toLowerCase().indexOf("win")>=0
if(RUN_ON_WINDOWS) {
log.debug "unzipping windows style"
ant.unzip( src: file, dest:file.parentFile, overwrite:"true")
} else {
def result = ant.exec(outputproperty:"text",
errorproperty: "error",
resultproperty: "exitValue",
dir: file.parent,
failonerror: true,
executable: "unzip") {
arg(value:file.name)
}
if(Integer.parseInt(ant.project.properties.exitValue)!=0) {
log.error "unable to unzip "+file.name+" exit value is "+ant.project.properties.exitValue
log.error "=========================================================\noutput\n=========================================================\n"+ant.project.properties.text
log.error "=========================================================\nerror\n=========================================================\n"+ant.project.properties.error
fail("unable to unzip "+file)
} else {
log.info "unzipped "+file.name
}
}
file.delete()
}
def unzipContentOf(File file) {
file.eachFileRecurse {
if(it.name.toLowerCase().endsWith("zip")) {
unzip(it)
}
}
}
FOLDERS_TO_EXPLORE.each { unzipContentOf(new File(it)) }
]]>