¿Cómo se agrega una carpeta (por ejemplo, una carpeta de recursos que contiene artes) al classpath de un proyecto netbeans? Logré hacerlo manualmente editando el archivo jar generado por NB del proyecto (es decir, su archivo MANIFEST.MF + copiando los recursos manualmente), pero debería haber una manera de decirle a los netbeans que también se preocupen por los recursos, ¿no?Cómo agregar recursos a classpath
estructura de la carpeta es el siguiente:
/project/art/
/project/dist/lib/
/project/dist/art/
/project/dist/project.jar
/project/lib/
/project/src/
no quiero para empaquetar el arte en el frasco porque me gustaría la técnica que son fácilmente intercambiables. Si agrego la carpeta art a la carpeta src, entonces NB compila bien, pero los recursos artísticos terminan en el contenedor.
Agregando la carpeta art a las bibliotecas del proyecto netbeans (Propiedades -> Bibliotecas -> Agregar JAR/Carpeta) parecía no funcionar, porque luego terminé con un error '... \ project \ art es un directorio o no se puede leer No copiando las bibliotecas. lo que a su vez evita que se copie incluso la carpeta de bibliotecas reales.
¿Alguna idea?
Saludos Chris
2 Las observaciones realizadas, en base a los comentarios de gpeche: a) especificando lugar la carpeta de recursos adicionales en la pestaña "Ejecutar" que en la ficha "Compilar" de las propiedades del proyecto - > Las bibliotecas no parecen hacer una gran diferencia en Netbeans (actualmente estoy usando 6.9.1). La salida (y por tanto de error) se mantiene igual, eso no es nada en absoluto se copia:
Created dir: C:\Users\Chrisi\Desktop\vocabulary\VocabularyTrainer\dist
C:\Users\Chrisi\Desktop\vocabulary\VocabularyTrainer\art is a directory or can't be read. Not copying the libraries.
Not copying the libraries.
Building jar: C:\Users\Chrisi\Desktop\vocabulary\VocabularyTrainer\dist\VocabularyTrainer.jar
Otro aspecto interesante es que en el menú de ayuda del panel Bibliotecas nada se menciona de forma explícita en relación con las carpetas como bibliotecas. ¿Podría ser posible que el botón en Netbeans se nombre falsamente, que solo se permiten los jar's reales?
b) Agregar la carpeta de recursos a la lista Bibliotecas tiene el impacto, sin embargo, para agregar otra entrada a MANIFEST.MF. Si bien, y ese es el problema menor, la entrada classpath parece esperar siempre que la carpeta de recursos sea una subcarpeta de la carpeta de la biblioteca (por ejemplo, "lib/arts"), el principal problema es que parece que falta una barra. Como se mencionó, la entrada generada por NB en MANIFEST.MF se verá como esta "lib/arts" (que no funciona para mí), mientras que (ajuste manual) "lib/arts /" hace ?!
La forma utilizo los recursos de la carpeta es algo parecido a esto:
URL resource = getClass().getResource("/gui/refresh.png");
ImageIcon tmp = new ImageIcon(resource);
Editar:
Basado en comentarios Tushars y this posting me encontré con la siguiente solución para ser una solución de compromiso aceptable entre la funcionalidad y consuelo
Anulo el objetivo ANT del archivo generado automáticamente 'build-impl.xml' que crea el Class-Path en el archivo MANIFEST.MF en el archivo 'build.xml' básico del proyecto Netbeans. El código que va al archivo 'build.xml' se parece a esto:
<property name="art.classpath" value="art/" />
<target name="-post-jar">
<mkdir dir="${dist.dir}/art"/>
<copy todir="${dist.dir}/art">
<fileset dir="${basedir}/art">
<!-- <exclude name="**/!source/**"/> if you want to exclude something... -->
</fileset>
</copy>
</target>
<target name="-init-macrodef-copylibs">
<macrodef name="copylibs" uri="http://www.netbeans.org/ns/j2se-project/3">
<element name="customize" optional="true"/>
<sequential>
<property location="${build.classes.dir}" name="build.classes.dir.resolved"/>
<pathconvert property="run.classpath.without.build.classes.dir">
<path path="${run.classpath}"/>
<map from="${build.classes.dir.resolved}" to=""/>
</pathconvert>
<pathconvert pathsep=" " property="jar.classpath">
<path path="${run.classpath.without.build.classes.dir}"/>
<chainedmapper>
<flattenmapper/>
<globmapper from="*" to="lib/*"/>
</chainedmapper>
</pathconvert>
<taskdef classname="org.netbeans.modules.java.j2seproject.copylibstask.CopyLibs" classpath="${libs.CopyLibs.classpath}" name="copylibs"/>
<copylibs compress="${jar.compress}" index="${jar.index}" jarfile="${dist.jar}" manifest="${manifest.file}" runtimeclasspath="${run.classpath.without.build.classes.dir}">
<fileset dir="${build.classes.dir}"/>
<manifest>
<attribute name="Class-Path" value="${jar.classpath} ${art.classpath}"/>
<customize/>
</manifest>
</copylibs>
</sequential>
</macrodef>
</target>
La desventaja es que para el desarrollo en Netbeans todavía tengo que agregar la carpeta de recursos (por ejemplo, 'arte') a las bibliotecas a listar hacer que el proyecto se ejecute en Netbeans. Esto causará una entrada adicional en el MANIFIESTO.archivo MF ('lib/arte'), junto con el efecto de que las bibliotecas no se copiarán automáticamente en la carpeta 'dist', con el mensaje
...\art is a directory or can't be read. Not copying the libraries.
Not copying the libraries.
Este behavor es - que yo sepa - destinado (para obligar a que todo estar atado en un frasco), a pesar de que hay discusiones sobre lo que está pasando. Para hacer un paquete de distribución real, tendría que quitar las carpetas de recursos de la lista de bibliotecas en NB y reconstruirlas.
Por supuesto, las ideas sobre una configuración más simplificada sin ningún tipo de compensación son bienvenidas. :)
1) añadir algo al archivo manifest.mf proyecto NB (que es el Class-Path en este caso) parece anular cualquier otra cosa que de lo contrario ir allí (por ejemplo, el otras bibliotecas agregadas al proyecto). ¿Alguna idea de cómo recuperar el camino original también? Por ejemplo, las bibliotecas se copiarían. 3) para mí no funciona sin la barra diagonal - tengo que agregar esa barra, entonces funciona. – ChristianS
Sugeriría primero generar el manifest.mf de la compilación de NetBeans y luego usar esos valores de ruta de clase predeterminados más las rutas de directorio adicionales agregadas. –
Agregue también una guía sobre cómo excluir los recursos de la carpeta, por lo que no se incluirá en .jar – GusDeCooL