小编Ste*_*ins的帖子

在Maven项目中管理JAXB生成的类

我有一个基于Maven的项目,我尝试添加一些由"jaxb2-maven-plugin"Maven插件自动生成的JAXB类.但是,我的第一个剪辑让我进入循环依赖循环:

  • 由于尚未生成这些JAXB类,因此引用它们的其他源会出现编译错误.
  • 因为那些其他源有编译错误,所以不会生成这些JAXB类.

似乎有两种明显的可能性来解决这个问题:

  1. 注释掉损坏的引用,以便构建项目并自动生成JAXB类.然后将这些生成的源复制/target/src/main/java,以便对它们的引用不会导致编译错误.
  2. 创建一个完全独立的项目,除了JAXB之外什么都没有.将其作为主项目中的依赖项包含在内.

我在这里错过了什么吗?选项#1看起来很荒谬......这不是人们使用JAXB的方式.选项#2似乎更合理,但仍然相当低效和繁琐.我真的不得不承担一个完全独立的项目的开销只是为了使用JAXB?

开发人员是否有更优雅的方法在Maven插件生成它们的同一个项目中引用JAXB生成的类?

更新: 根据要求,这是我的POM的相关部分:

<build>
    <plugins>
        <plugin>
            <!-- configure the compiler to compile to Java 1.6 -->
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <configuration>
                <source>1.6</source>
                <target>1.6</target>
            </configuration>
        </plugin>       
        <plugin>
            <groupId>org.codehaus.mojo</groupId>
            <artifactId>jaxb2-maven-plugin</artifactId>
            <version>1.4</version>
            <executions>
                <execution>
                    <phase>generate-sources</phase>
                    <goals>
                        <goal>xjc</goal>
                    </goals>
                </execution>
            </executions>
            <configuration>
                <!-- The name of your generated source package -->
                <packageName>com.mypackage</packageName> 
            </configuration>
        </plugin>
    </plugins>  
</build>
Run Code Online (Sandbox Code Playgroud)

当我运行时mvn clean package,我会看到我的JAXB源是在/target子目录下生成的.但是,这些生成的源不会自动添加到编译阶段的类路径中.

POST-RESOLUTION UPDATE: 事实证明我的编译问题更多地与我在Eclipse中运行的事实有关,而且它的Maven集成在"jaxb2-maven-plugin"中存在一些问题.有关问题及其解决方案的更多详细信息,请参阅此StackOverflow问题.

java jaxb java-ee maven spring-oxm

11
推荐指数
2
解决办法
3万
查看次数

Travis CI没有使用pom.xml中提供的额外Maven存储库

我有一个基于Java的GitHub项目,fitnessjiffy-spring(我目前专注于"bootstrap"分支).它取决于从另一个GitHib项目(fitnessjiff- etl)构建的库.我正在尝试配置由Travis CI构建的这两个.

不幸的是,Travis在处理基于Maven的Java项目时并不像Jenkins或Hudson那样复杂.Jenkins可以轻松处理项目之间的依赖关系,但Travis似乎并不存在相同的概念.如果一个项目依赖于另一个项目,那么其他项目必须先前已经构建...并且其工件上传到某个Maven仓库,第一个项目可以在以后下载.

我的"fitnessjiffy-etl"图书馆正在建设和部署.我正在使用Bintray进行Maven存储库托管,您可以通过以下方式在纯HTTP上清楚地看到我的工件:

http://dl.bintray.com/steve-perkins/maven/

在我的"fitnessjiffy-spring"项目中,我将直接添加此Maven repo位置pom.xml,以便Travis能够找到该工件依赖项. 这是我撰写本文时POM的状态.请注意<repositories>文件底部的元素.

当我在本地构建这个项目时,它工作正常.我可以看到它从" http://dl.bintray.com/ ..." 下载Maven工件.但是,当我尝试在Travis CI上构建时,它每次都会失败.我可以在控制台日志中看到Travis仍在尝试从Maven Central下载工件而不是我指定的repo.

这对其他人有意义吗?为什么Maven在本地构建时在POM文件中使用自定义存储库位置,但在Travis CI构建上运行时忽略此配置?

java github maven travis-ci bintray

10
推荐指数
1
解决办法
1373
查看次数

在每个级别具有多个子(已排序)的Java树结构

我正在使用一个平面的对象列表,但它们在父子关系中相互关联.一个对象可以有任意数量的子节点,或者根本没有.我需要将这些对象显示为树,显示这些关系.树的每个级别应进行分类(对象兼容Collections.sort()).

问题分为两个部分:

  1. Java是否有一个很好的开箱即用的数据结构来保存这样一棵树,或者我是否需要从头开始编写一个?(这不是一个巨大的任务,但重新发明轮子是没有意义的)我DefaultTreeModel在Swing中知道...但是这个应用程序在服务器端运行,并且在代码审查中使用Swing包将不受欢迎.

  2. 将平面列表加载到这样的数据结构中的最佳模式是什么?我的第一个想法是识别根级对象,然后使用递归方法遍历他们的子孙,孙子等等.但是,为了在树中的每个级别对对等体进行排序的要求...我是当我正在构建树时,不确定是否更有意义地担心这一点,或者在我解析树以供显示时担心它.

java data-structures

9
推荐指数
2
解决办法
3万
查看次数

当浏览器预先填充表单字段时,AngularJS"ng-submit"有问题吗?

我是AngularJS的新手,我正在尝试使用"登录"表单的单页应用程序.表单由"ng-submit"绑定,并且如果身份验证成功,其控制器会发出一个AJAX调用返回一个令牌.后续的AJAX调用会传递此令牌.(不,我不想使用基本身份验证,因为我想要一个非hacky"注销"按钮).

我已将用户名和密码字段设置为"required",以便当用户尝试在字段中提交带有空白值的表单时,AngularJS将显示工具提示:

<form name="loginForm" ng-submit="login()">
    <fieldset>
        <legend>Sign In</legend>
        <label>Email</label>
        <input name="loginEmail" type="text" placeholder="Registered email address…" ng-model="loginEmail" required>
        <label>Password</label>
        <input name="loginPassword" type="password" placeholder="Password…" ng-model="loginPassword" required>
        <br/>
        <button type="submit" class="btn">Login</button>
    </fieldset>
</form>
Run Code Online (Sandbox Code Playgroud)

当某些浏览器(至少是Firefox)询问用户是否希望浏览器记住用户名和密码,并在下次预先填充它时,会出现问题.

当浏览器填充其中任何一个字段时,AngularJS基本上停止工作."ng-submit"绑定表单将不会提交...根本不会调用绑定控制器函数.我的第一个想法是,预先填充的字段没有触发事件,因此AngularJS认为它们仍然是空白的.但是,没有弹出工具提示来警告空白字段.就像AngularJS完全关闭一样.

奇怪的是,只要你对任一字段进行任何手动编辑,AngularJS就会恢复生机......验证工具提示和表单提交再次开始工作.

这里有错误,还是我的知识缺乏问题?如何让AngularJS识别浏览器填充的字段?或者,如果此区域存在问题,您如何阻止浏览器预先填充字段,以免它们干扰AngularJS?

javascript angularjs

9
推荐指数
2
解决办法
7393
查看次数

如何通过角色限制对Spring Data REST投影的访问?

在使用Spring Data JPA和Spring Data REST的应用程序中,假设您有一个这样的实体类:

@Entity
public class Person {

   @Id @GeneratedValue
   private int id;

   private String name;

   @JsonIgnore
   private String superSecretValue;

   ...

}
Run Code Online (Sandbox Code Playgroud)

我们希望Spring Data REST公开所有这个实体的字段EXCEPT superSecretValue,因此我们用这个字段注释了该字段@JsonIgnore.

但是,在某些情况下,我们想要访问superSecretValue,因此我们创建一个投影,返回所有字段,包括:

@Projection(name = "withSecret", types = {Person.class})
public interface PersonWithSecret {

   String getName();
   String getSuperSecretValue();

}
Run Code Online (Sandbox Code Playgroud)

真棒.所以现在我们可以访问包括如下字段的Person实体:superSecretValue

curl http://localhost:8080/persons?projection=withSecret
Run Code Online (Sandbox Code Playgroud)

我的问题是我们如何确保这一预测?我们该如何配置的东西,任何人都可以检索Person实体,而不superSecretValue领域......但只用了一定的作用(比如人ROLE_ADMIN)可以使用投影来检索隐藏字段?

我发现使用的例子不胜枚举@PreAuthorize@Secured注释,以确保春季数据JPA库CRUD方法(例如save(),delete())...但不知道如何限制一个Spring数据REST投影的应用实例.

java rest spring spring-data spring-data-rest

9
推荐指数
1
解决办法
2393
查看次数

将Maven2复制资源到构建目录,但不将它们捆绑在JAR中

我在NetBeans中启动了一个新的Maven项目,接受了所有默认设置.将所有JAR依赖项剥离出来的POM在此问题的底部被剪切粘贴.

应用程序读入各种属性文件(例如,日志记录和配置).它还可读取字体,图像和声音等外部资源.我不希望将所有这些资源捆绑到JAR文件中.相反,我计划将它们部署在部署JAR的目录下的子目录中.

项目目录结构的简化视图如下所示:

-src
   |---main
           |---java
                   |---com.mypackage, etc
           |---resources
                        |---conf
                        |---fonts
                        |---images
                        |---sounds
+target
Run Code Online (Sandbox Code Playgroud)

我会喜欢一个干净的构建是这样以后有:

+src
-target
       |---myproject-1.0.0.jar (compiled contents of "src/main/java" ONLY)
       |---conf
       |---fonts
       |---images
       |---sounds
Run Code Online (Sandbox Code Playgroud)

但是,当我通过NetBeans(或命令行)执行"清理并构建"或"执行"时......我实际得到的内容如下所示:

+src
-target
       |---classes
                  |---("src/main/java" and "src/main/resources" slammed together)
       |---myproject-1.0.0.jar (the "classes" subdirectory JAR'ed up)
Run Code Online (Sandbox Code Playgroud)

有人能指出我正确的方向获得第一个结果而不是第二个结果吗?如果这是一个愚蠢的问题(我是Maven新手),或者如果我忽略了以前要求的副本,我道歉.但是,从我在Stack Overflow上的搜索开始......看起来所有重复的问题都试图走向另一个方向!(即获取资源一个JAR,而不是让他们出去)

pom.xml中:

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>steveperkins</groupId>
    <artifactId>myproject</artifactId>
    <packaging>jar</packaging>
    <version>1.0.0</version>
    <name>My Project</name>
    <url>http://maven.apache.org</url>
    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>2.0.2</version>
                <configuration>
                    <source>1.4</source>
                    <target>1.4</target>
                </configuration>
            </plugin>
        </plugins> …
Run Code Online (Sandbox Code Playgroud)

java maven-2 netbeans

8
推荐指数
2
解决办法
2万
查看次数

Eclipse + Maven + Tomcat:使用自定义选项构建WAR时测试Web应用程序

我正在使用Eclipse(Helios)和"m2eclipse"插件.我正在开发一个基于Maven的Web应用程序项目,我在Eclipse内部设置的本地Tomcat服务器上进行测试.

一般来说,这或多或少都有效."m2eclipse"有时可能是片状的...但是在大多数情况下它会使我的POM和我的Eclipse项目设置保持同步,同样在Tomcat中保持已部署的代码最新.

然而,最近我添加了一个皱纹.我有一个JavaScript包含文件,从测试环境到实际生产环境时需要有所不同.这些差异太大,无法通过Maven过滤和令牌替换进行干净处理.我需要的是在我的项目中保留两个单独的文件,并且只部署适合构建配置文件的文件.

我在Maven POM中用一些"targetPath"技巧完成了这个:

<plugin>
   <groupId>org.apache.maven.plugins</groupId>
   <artifactId>maven-war-plugin</artifactId>
   <version>2.1.1</version>
   <configuration>
      <webResources>
         <resource>
            <!-- take the stuff from a "prod" or "non-prod" subdirectory and copy it one level up -->
            <directory>src/main/webapp/js/${profile.name}</directory>
            <targetPath>js</targetPath>
         </resource>
         <resource>
            <!-- now don't deploy those profile-specific subdirectories -->
            <directory>src/main/webapp/js</directory>
            <excludes>
               <exclude>prod</exclude>
               <exclude>non-prod</exclude>
            </excludes>
         </resource>
      </webResources>
   </configuration>
</plugin>
Run Code Online (Sandbox Code Playgroud)

这构建了一个完美的WAR文件,当我部署一些外部Tomcat服务器时,它可以正常工作.但是,问题是Eclipse在Eclipse中运行Tomcat时不使用该WAR文件.相反,Eclipse使用应用程序的爆炸版本,部署到一个神秘的目录,如下所示:

<workspace>/.metadata/.plugins/org.eclipse.wst.server.core/tmp1/wtpwebapps/MyApp
Run Code Online (Sandbox Code Playgroud)

......显然应用程序的文件被复制到此位置,在Maven执行上面显示的小技巧之前.因此,在Eclipse内部进行本地测试时,预期位置中根本不存在JavaScript包含.

有没有解决这个问题的方法?可能是Eclipse更改或Maven更改,将文件从Maven的"目标"目录拉到Eclipse的"wtpwebapps"目录中?也许有另一种解决特定于配置文件的包含文件问题的方法?

java eclipse tomcat m2eclipse maven

8
推荐指数
1
解决办法
6263
查看次数

如何查询和索引嵌套在PostgreSQL 9.3+深层多级的JSON数据?

在PostgreSQL 9.3中,我存储了一些相当复杂的JSON对象,其中数组嵌套在数组中.此片段不是真实数据,但说明了相同的概念:

{
   "customerId" : "12345",
   "orders" : [{
      "orderId" : "54321",
      "lineItems" : [{
         "productId" : "abc",
         "qty" : 3
      }, {
         "productId" : "def",
         "qty" : 1
      }]
   }
}
Run Code Online (Sandbox Code Playgroud)

我希望SQL查询能够对lineItem对象进行操作...不仅在这个单一的JSON结构中,而且在该表列中的所有JSON对象中.例如,一个SQL查询返回所有不同productId的,以及它们的总销售额qty.为了防止这样的查询花了一整天,我可能想要索引lineItem或其子字段.

使用这个StackOverflow问题,我想出了如何编写一个有效的查询:

SELECT
   line_item->>'productId' AS product_id, 
   SUM(CAST(line_item->>'qty' AS INTEGER)) AS qty_sold
FROM
   my_table, 
   json_array_elements(my_table.my_json_column->'orders') AS order,
   json_array_elements(order->'lineItems') AS line_item
GROUP BY product_id;
Run Code Online (Sandbox Code Playgroud)

但是,最初的StackOverflow问题处理的是仅嵌套一层而不是两层的数据.我扩展了相同的概念(即条款中的"横向连接" FROM),通过添加额外的横向连接来深入潜水.但是,我不确定这是否是最佳方法,因此我的问题的第一部分是:查询JSON对象中任意数量级别的 JSON数据的最佳方法是什么?

对于第二部分,在此类嵌套数据上创建索引,此StackOverflow问题再次处理仅嵌套一层深度的数据.然而,我只是完全迷失了,我的头脑游泳试图想想如何将这个应用到更深层次的水平.任何人都可以提供一个明确的方法来索引至少两个级别的数据,lineItems如上所述?

sql postgresql json

8
推荐指数
1
解决办法
4925
查看次数

如何以编程方式创建包含内容的Google文档电子表格?

我发现了多个StackOverflow问题,涉及如何使用Google Spreadsheets API或旧版API 创建或编辑Google Doc电子表格.但是,这个Spreadsheets API似乎是"gdata"库的一部分,据我所知,这个库已被弃用.

较新的StackOverflow答案显示了如何使用Drive API创建一个空电子表格,这似乎更新.但是,通过查看该API的文档和示例,它似乎只允许您使用电子表格MIME类型创建新的EMPTY文件.我没有找到任何用于创建包含实际内容(即行,列,工作表等)的电子表格的功能.

创建新的Google Doc电子表格并用内容填充它的当前流程是什么?Drive API是否具有我不理解的功能?"gdata"库(或者至少它的Spreadsheets API部分)毕竟没有被完全弃用吗?是否有一些我完全错过的第三种方法?我正在使用Java代码,尽管我确信任何Python API都具有Java等价物.

google-docs google-sheets google-docs-api google-spreadsheet-api google-drive-api

8
推荐指数
1
解决办法
1万
查看次数

在Apache Camel应用程序中,单元测试如何注入模拟端点来代替真实端点?

我正在使用Apache Camel 实现消息转换器模式,以使用来自RESTful端点的消息并将它们发送到AMQP端点.

封闭的应用程序基于Spring Boot,因此我使用Camel的" spring-boot "组件来集成这两个框架.正如这个spring-boot链接中的文档所示,我正在一个@Configuration注释类中实现我的Camel路由,该类扩展了RouteBuilder:

@Component
public class MyRestToAmqpRouter extends RouteBuilder {

   @Override
   public void configure() throws Exception {

      from("jetty:http://my-restful-url")
         .process(exchange -> {
            // convert the message body from JSON to XML, take some 
            // incoming header values and put them in the outgoing
            // body, etc...
         }).to("rabbitmq://my-rabbitmq-url");

   }

}
Run Code Online (Sandbox Code Playgroud)

我的问题涉及如何进行单元测试这种翻译,而不需要实际的RESTful端点或配置的RabbitMQ代理?我已经阅读了许多在线示例,以及Camel in Action一书......看起来单元测试Camel路线的典型方法是将路径切入粘贴到单元测试中,并替换一个或更多端点URL带有" mock:whatever".

我想这八九不离十的作品...但它非常脆弱,当有人不更新单元测试后改变了真正的代码测试套件将无法识别.

我试图使用模拟来修改一些基于Spring的单元测试示例,如下所示:

@RunWith(CamelSpringJUnit4ClassRunner.class)
@ContextConfiguration(classes = {Application.class})
public class MyRestToAmqpRouterTest extends AbstractJUnit4SpringContextTests {

    @Produce(uri …
Run Code Online (Sandbox Code Playgroud)

java spring eai apache-camel spring-boot

8
推荐指数
1
解决办法
7799
查看次数