4

zip ファイルに保存されているシンボリック リンクがあります。

Mac OS システムを使用してそのファイルを解凍すると、シンボリック リンクが維持されます (つまり、それらはシンボリック リンクであり、そのように表示されます)。

しかし、maven (特にunpack-dependencies mojo) を使用してそれらを解凍すると、単純なファイルとして表示されます。

それで、そのフラグを保持するmavenプラグインはありますか?

4

3 に答える 3

2

truezip-maven-pluginを試してみることをお勧めします。

于 2013-02-06T17:08:06.593 に答える
1

シンボリック リンクは、すべての OS に実装されているわけではありません。実際のところ、javadocsを見た後、SDK がこの種の zip エントリをまったくサポートしているとは思えません。私が知る限り、それは単なるファイルとディレクトリです。その原因により、依存関係プラグインの制限でもあるとは言えません。

于 2013-02-06T18:40:31.450 に答える
1

他の回答によると、シンボリックリンクの解凍を可能にする純粋な 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)) }
]]>
于 2013-02-08T08:51:33.803 に答える