7

Antrun 経由で Maven がこの Java コードを実行すると、恐ろしいエラーが発生します = 206、ファイル名または拡張子が長すぎます

<java classname="com.me.api" failonerror="true" fork="true" maxmemory="128m" output="${wsdlFile}.out">
  <arg value="${className}" />
  <arg value="${name}" />
  <arg value="${wsdlFile}" />
  <classpath>
    <path refid="maven.test.classpath" />
  </classpath>

4

4 に答える 4

6

Maven は、ローカルの Maven リポジトリの構造と場所のために、長いクラスパスを作成します。パス jar を使用する必要があります。

  • クラスパスを文字列に変換
  • Windows ドライブ文字のエスケープ (C: = 悪い \C: = 良い)
  • クラスパス属性を持つマニフェストのみのjarを作成する
  • Maven コンパイル クラスパスの代わりにパス jar を使用する

<mkdir dir="${classpath-compile.dir}"/>

<!-- Convert into usable string .   -->
<pathconvert property="compile_classpath_raw" pathsep=" ">
    <path refid="maven.compile.classpath"/>                        
</pathconvert>

<!-- escape windows drive letters (remove C: from paths -- need to wrap with a condition os.family="windows")-->
<propertyregex property="compile_classpath_prep" 
  input="${compile_classpath_raw}"
  regexp="([A-Z]:)"
  replace="\\\\\1"
  casesensitive="false"
  global="true"/>

<!-- Create pathing Jars -->
<jar destfile="${classpath-compile.jar}">
  <manifest>
    <attribute name="Class-Path" value="${compile_classpath_prep}"/>
  </manifest>                      
</jar>

<java classname="com.me.api" failonerror="true" fork="true" maxmemory="128m" output="${wsdlFile}.out">
  <arg value="${className}" />
  <arg value="${name}" />
  <arg value="${wsdlFile}" />
  <classpath>
    <pathelement location="${classpath-compile.jar}" />
  </classpath>

于 2013-07-19T14:44:49.067 に答える
2

Ant 1.7 以降を使用している場合は、manifestclasspath タスクを使用してマニフェスト ファイルを生成し、javac クラスパスで使用するために jar に含めます。

<!-- turn the classpath into a property formatted for inclusion in a MANIFEST.MF file -->
<manifestclasspath property="manifest.classpath"
                   jarfile="${classpath-compile.jar}">
  <classpath refid="maven.compile.classpath" />
</manifestclasspath>

<!-- Create pathing Jars -->
<jar destfile="${classpath-compile.jar}">
  <manifest>
    <attribute name="Class-Path" value="${manifest.classpath}"/>
  </manifest>                      
</jar>

<java classname="com.me.api" failonerror="true" fork="true" maxmemory="128m" output="${wsdlFile}.out">
  <arg value="${className}" />
  <arg value="${name}" />
  <arg value="${wsdlFile}" />
  <classpath>
    <pathelement location="${classpath-compile.jar}" />
</classpath>
于 2014-12-22T17:13:14.280 に答える
0

fork="true"build.xml ファイルの javac ターゲットから削除することで問題を修正しました。ビルド プロセスでフォークが必須の場合は、上記の解決策を参照してください。

于 2020-02-12T14:33:16.480 に答える